在python3中,有个模块pymysql,用户可以通过这个模块实现远程对mysql数据库的操作。

1.python操作mysql流程架构

2 .python操作mysql使用演示

1.安装并且导入包pymysql,如果环境中没有安装pymysql包,可以直接pip3 install pymysql安装该模块,然后使用import pymysql查看是否安装正确。下面是基于pycharm进行开发测试python连接操作数据库

from pymysql import *def main():# 创建Connection连接conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='123456',charset='utf8')# 获得Cursor对象cs1 = conn.cursor()# 执行insert语句,并返回受影响的行数:添加一条数据# 增加count = cs1.execute('insert into goods_cates(name) values("硬盘")')#打印受影响的行数print(count)count = cs1.execute('insert into goods_cates(name) values("光盘")')print(count)# # 更新# count = cs1.execute('update goods_cates set name="机械硬盘" where name="硬盘"')# # 删除# count = cs1.execute('delete from goods_cates where id=6')# 提交之前的操作,如果之前已经之执行过多次的execute,那么就都进行提交conn.commit()# 关闭Cursor对象cs1.close()# 关闭Connection对象conn.close()if __name__ == '__main__':main()

尖叫提示: 

1.Connection 对象

   1.1用于建立与数据库的连接,创建对象:调用connect()方法,该方法有很多参数,可以参考源码。

   1.2该connect()常用参数如下:这些参数的顺序可以调整,不用一致。

  • 参数host:连接的mysql主机ip,如果本机是'localhost'
  • 参数port:连接的mysql主机的端口,默认是3306
  • 参数database:数据库的名称
  • 参数user:连接的用户名
  • 参数password:连接的密码
  • 参数charset:通信采用的编码方式,推荐使用utf8

   1.3 Connection对象的方法

  • close()关闭连接
  • commit()提交,主要用来对数据增,删,改操作后提交的。
  • cursor()返回Cursor对象,用于执行sql语句并获得结果

2.Cursor对象

  • 用于执行sql语句,使用频度最高的语句顺序为select、insert、update、delete
  • 获取Cursor对象:调用Connection对象的cursor()方法

2.1对象的方法

  • close()关闭
  • execute(operation [, parameters ])执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句
  • fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组
  • fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回
  • fetchmany( int args )执行查询时,获取查询结果集的指定几行,返回一个元组。

2.2对象的属性

  • rowcount只读属性,表示最近一次execute()执行后受影响的行数
  • connection获得当前连接对象

3.python操作mysql的注意事项

1.如下通过python查询mysql中多条数据

from pymysql import *def main():# 创建Connection连接conn = connect(host='localhost',port=3306,user='root',password='123456',database='jing_dong',charset='utf8')# 获得Cursor对象cs1 = conn.cursor()# 执行select语句,并返回受影响的行数:查询一条数据count = cs1.execute('select id,name from goods where id>=4')# 打印受影响的行数print("查询到%d条数据:" % count)# for i in range(count):#     # 获取查询的结果#     result = cs1.fetchone()#     # 打印查询的结果#     print(result)#     # 获取查询的结果result = cs1.fetchall()print(result)# 关闭Cursor对象cs1.close()conn.close()if __name__ == '__main__':main()''''
查询到19条数据:
((4, 'x550cc 15.6英寸笔记本'), (5, 'x240 超极本'), (6, 'u330p 13.3英寸超极本'), (7, 'svp13226scb 触控超极本'), (8, 'ipad mini 7.9英寸平板电脑'), (9, 'ipad air 9.7英寸平板电脑'), (10, 'ipad mini 配备 retina 显示屏'), (11, 'ideacentre c340 20英寸一体电脑 '), (12, 'vostro 3800-r1206 台式电脑'), (13, 'imac me086ch/a 21.5英寸一体电脑'), (14, 'at7-7414lp 台式电脑 linux )'), (15, 'z220sff f4f06pa工作站'), (16, 'poweredge ii服务器'), (17, 'mac pro专业级台式电脑'), (18, 'hmz-t3w 头戴显示设备'), (19, '商务双肩背包'), (20, 'x3250 m4机架式服务器'), (21, '商务双肩背包'), (22, 'LaserJet Pro P1606dn 黑白激光打印机'))
Process finished with exit code 0'''

2.如何防止sql注入 

下面演示什么叫sql注入,就是非法的sql输入来获取系统的一些使用权限。

from pymysql import *def main():find_name = input("请输入物品名称:")# 创建Connection连接conn = connect(host='localhost',port=3306,user='root',password='123456',database='jing_dong',charset='utf8')# 获得Cursor对象cs1 = conn.cursor()# 输入 " or 1=1 or "   (双引号也要输入)sql = 'select * from goods where name="%s"' % find_nameprint("""sql===>%s<====""" % sql)count = cs1.execute(sql)# 打印受影响的行数print(count)# 获取查询的结果# result = cs1.fetchone()result = cs1.fetchall()# 打印查询的结果print(result)# 关闭Cursor对象cs1.close()# 关闭Connection对象conn.close()if __name__ == '__main__':main()

执行上面程序,在输入商品时,我们输入" or 1=1 or "   (双引号也要输入),这样与我们底层写好的查询语句进行拼接,如下,拼接后的sql就变成了select * from goods where name="" or 1=1 or "",这是一个恒成立的where子句,所以可以获取该表中所有数据。

请输入物品名称:" or 1=1 or "
sql===>select * from goods where name="" or 1=1 or ""<====
22
((1, 'r510vc 15.6英寸笔记本', 5, 2, Decimal('3399.000'), b'\x01', b'\x00'), (2, 'y400n 14.0英寸笔记本电脑', 5, 7, Decimal('4999.000'), b'\x01', b'\x00'), (3, 'g150th 15.6英寸游戏本', 4, 9, Decimal('8499.000'), b'\x01', b'\x00'), (4, 'x550cc 15.6英寸笔记本', 5, 2, Decimal('2799.000'), b'\x01', b'\x00'), (5, 'x240 超极本', 7, 7, Decimal('4880.000'), b'\x01', b'\x00'), (6, 'u330p 13.3英寸超极本', 7, 7, Decimal('4299.000'), b'\x01', b'\x00'), (7, 'svp13226scb 触控超极本', 7, 6, Decimal('7999.000'), b'\x01', b'\x00'), (8, 'ipad mini 7.9英寸平板电脑', 2, 8, Decimal('1998.000'), b'\x01', b'\x00'), (9, 'ipad air 9.7英寸平板电脑', 2, 8, Decimal('3388.000'), b'\x01', b'\x00'), (10, 'ipad mini 配备 retina 显示屏', 2, 8, Decimal('2788.000'), b'\x01', b'\x00'), (11, 'ideacentre c340 20英寸一体电脑 ', 1, 7, Decimal('3499.000'), b'\x01', b'\x00'), (12, 'vostro 3800-r1206 台式电脑', 1, 5, Decimal('2899.000'), b'\x01', b'\x00'), (13, 'imac me086ch/a 21.5英寸一体电脑', 1, 8, Decimal('9188.000'), b'\x01', b'\x00'), (14, 'at7-7414lp 台式电脑 linux )', 1, 3, Decimal('3699.000'), b'\x01', b'\x00'), (15, 'z220sff f4f06pa工作站', 3, 4, Decimal('4288.000'), b'\x01', b'\x00'), (16, 'poweredge ii服务器', 3, 5, Decimal('5388.000'), b'\x01', b'\x00'), (17, 'mac pro专业级台式电脑', 3, 8, Decimal('28888.000'), b'\x01', b'\x00'), (18, 'hmz-t3w 头戴显示设备', 6, 6, Decimal('6999.000'), b'\x01', b'\x00'), (19, '商务双肩背包', 6, 6, Decimal('99.000'), b'\x01', b'\x00'), (20, 'x3250 m4机架式服务器', 3, 1, Decimal('6888.000'), b'\x01', b'\x00'), (21, '商务双肩背包', 6, 6, Decimal('99.000'), b'\x01', b'\x00'), (22, 'LaserJet Pro P1606dn 黑白激光打印机', 12, 4, Decimal('1849.000'), b'\x01', b'\x00'))Process finished with exit code 0

当然,之所以有sql注入,还是我们在开发的时候相当于留下了“漏洞”,才让别人有机可乘。比如python操作mysql,实际开发中我们不要写这种拼接的形式,而是要将查询语句参数化,就可以避免sql注入了。因为execute(),实现了反sql注入功能。

from pymysql import *def main():find_name = input("请输入物品名称:")# 创建Connection连接conn = connect(host='localhost',port=3306,user='root',password='123456',database='jing_dong',charset='utf8')# 获得Cursor对象cs1 = conn.cursor()# 安全的方式# 构造参数列表params = [find_name]# 执行select语句,并返回受影响的行数:查询所有数据count = cs1.execute('select * from goods where name=%s', params)# 注意:# 如果要是有多个参数,需要进行参数化# 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可# 打印受影响的行数print(count)# 获取查询的结果# result = cs1.fetchone()result = cs1.fetchall()# 打印查询的结果print(result)# 关闭Cursor对象cs1.close()# 关闭Connection对象conn.close()if __name__ == '__main__':main()'''这个时候再用sql注入的方式进行sql注入,发现失败了
请输入物品名称:" or 1=1 or "
0
()
'''

python连接操作mysql数据库使用详解相关推荐

  1. wps连接mysql数据库增删改查_Python操作MySQL数据库实例详解【安装、连接、增删改查等】...

    本文实例讲述了python操作MySQL数据库.分享给大家供大家参考,具体如下: 1.安装 通过Python连接MySQL数据库有很多库,这里使用官方推荐的MySQL Connector/Python ...

  2. python 搭建登陆系统,用Python连接操作MySQL数据库,做一个简单的用户登录注册系统...

    我们可以很容易地用Python实现一个用户登录系统,相信这即使是对编程新手来说也是小菜一碟. 作为Python的小萌新,今天我想记录下来的是如何实现一个连接了MySQL数据库的用户登录注册系统,它的效 ...

  3. mysql 操作xm_Python操作MySQL数据库实例详解

    在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1. ...

  4. python连接不上数据库_详解pycharm连接不上mysql数据库的解决办法

    问题描述 环境:ubuntu18.04,mysql5.7 今天在ubuntu下使用pycharm连接mysql,发现连接不上 这不是缺少驱动吗?下载之! 下好之后点进去 连接 点击test conne ...

  5. linux python开发环境sql数据迁移到mysql_linux环境下python怎样操作mysql数据库

    展开全部 linux环境下python怎样操作mysql数据库呢?方法如下: 首先在Linux环境下安装mysql-python 1.下载mysql-python 打开终端: cd /usr/loca ...

  6. 如何查看mysql数据库的引擎/MySQL数据库引擎详解

    一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎: mysql> show engines; 看你的mysql当前默认的存储引擎: m ...

  7. 【Python】Python 2 和 Python 3 操作 MySQL 数据库实现创建表、删除表、增删改查操作

    1.MySQL数据库和表的编码格式 (1)创建数据库并指定字符集 mysql> create database testpythondb character set utf8; Query OK ...

  8. Python 2 和 Python 3 操作 MySQL 数据库实现创建表、删除表、增删改查操作

    1.MySQL数据库和表的编码格式 (1)创建数据库并指定字符集 mysql> create database testpythondb character set utf8; Query OK ...

  9. silverlight mysql_Silverlight中衔接MySQL数据库实例详解

    Silverlight中衔接MySQL数据库实例详解 日期:2010年5月25日 作者: 本文将重点讲述Silverlight中衔接MySQL数据库实例,这在RIA开发中比拟根底,但是也是比拟首要的内 ...

最新文章

  1. RNN和LSTM的正向/前向传播-图示公式和代码
  2. 【模板】折线分割平面
  3. nyoj 287(区间覆盖)
  4. 随笔② Java中的关键字 --- final关键字
  5. hbase获取region以及读取每个region的第一行
  6. python图像处理:一福变五福
  7. 安装m2eclipse插件
  8. 关于JSBuilder2的使用.
  9. 拓端tecdat|R语言用于线性回归的稳健方差估计
  10. 关于笔记本自动睡眠更改设置无用的解决办法
  11. A1339. JZPLCM(顾昱洲)|树状数组|hash表|逆元|分解质因数
  12. KT148A语音芯片怎么烧录语音进入芯片里面通过串口和电脑端的工具
  13. latex制作幻灯片模板
  14. C/C++快速读写磁盘数据的方法
  15. 【如何编码实现一个随机点名器】
  16. 论文阅读:**CTF: Anomaly Detection in High-Dimensional Time Series with Coarse-to-Fine Model Transfer
  17. 《视频解密》中文版(第四版) 第五章 模拟视频接口
  18. DP问题(动态规划)
  19. VeryCD上的EIOffice 2009简介
  20. 堆栈溢出:Stack overflow (参数: 0x0000000000000001, 0x0000005410A03FF8)

热门文章

  1. java AES256+base64加密/解密
  2. 2022年 HSC-1th中CRYPTO的Easy SignIn
  3. 大众点评会否与微信关系链融合?这家融资2275万的美国公司已说明一些问题
  4. 机器视觉——车牌识别实验汇总
  5. 2019长沙理工大学计算机专业分数线,长沙理工大学
  6. 模块化数据中心解决方案
  7. jsp352 cs拼图游戏的设计与实现
  8. 【flash】每日一签,保佑大家健康平安,看看你是什么签!
  9. win10计算机右键属性打不开,win10系统右键点击“属性”打不开窗口的具体办法...
  10. sql复习(sql基础、过滤和排序数据、单行函数)