码迷,mamicode.com
首页 > 数据库 > 详细

python进阶(十三、mysql:PyMySQL)

时间:2020-12-14 13:24:20      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:logs   database   标识   处理   三引号   取值   有一个   一个   har   

3.mysql数据库

3.15 使用python操作mysql数据库(PyMySQL)
3.15.1. PyMySQL的安装
1)使用命令安装:pip install pymysql
2)使用Pycharm安装
技术图片
技术图片
技术图片

3.15.2. python连接数据库
1)参看参数
技术图片
技术图片
技术图片
技术图片

2)创建连接和获取数据
技术图片
技术图片

3)异常处理
mysql语句错误时,会将错误信息传给python,并报错
技术图片
可以使用异常处理,处理mysql语句错误
技术图片

4)关闭游标和连接
使用完数据库,要关闭游标和连接,释放资源
技术图片

3.15.3. 数据的增删改
1)数据添加
(1)书写执行语句时,注意sql语句内部的字符串标识要与外边的标识区分开
(2)修改数据的数据要执行commit()才能真正写入数据库
技术图片

2)数据修改
技术图片

3)数据删除
技术图片

3.15.4. 数据查询
1)fetch
fetchone():获取一条数据
fetchmany(n):获取n条数据,可用于分页显示
fetchall():获取全部数据
技术图片

2)fetch查询的返回结果默认是元组,可以在元组中直接取值
技术图片

3)指定fetch输出类型是字典:
cursor=pymysql.cursors.DictCursor
技术图片

4)rowcount:是一个只读属性,返回执行execute()方法后影响的行数。
技术图片
可以使用rowcount循环读取fetchone数据
技术图片

3.15.5. 数据回滚:rollback
在执行多行语句时,如果其中某行语句出现错误,将前面已经执行成功的语句也撤销,这个过程称为数据回滚。数据回滚可以保证数据的安全和完整性。
技术图片
注意:使用数据回滚时,commit()方法一定要写在try语句的最后。
如果提前使用commit()方法将数据写入数据库,然后再报错,rollback无法删除已经写入数据库中的数据。
rollback只能清除内存中的修改,无法修改数据库中的数据。

3.15.6. 表操作
表操作(新建表、修改表、删除表)时,不执行commit()也会直接写到数据库。
技术图片
技术图片

3.15.7. 将mysql语句写入字符串,在执行
技术图片
使用三引号(”””)定义字符串可以换行,方便书写

3.15.8. sql注入(重点)
1)在sql语句中,遇到“;--”后面的语句就被忽略了
技术图片

2)使用mysql保存用户名和密码,登录验证时,会使验证失效
(1)数据库中创建用户信息表,并添加用户名和密码
技术图片
(2)在python中,判断用户输入的用户名和密码,是否与数据库中的数据相同
技术图片
(3)异常输入时,也可以登陆成功
只知道用户名,不知道密码,可以登陆成功
技术图片
因为mysql执行到“;-- ”后,不在执行后面的语句了。
注意: “;-- ”后面有一个空格
输入时加入or 1=1,用户名和密码都错误依然可以登录成功
技术图片

3)解决方法
定义字符串时,只需要用占位符(%s)占位;然后使用execute()方法实现拼接mysql语句的拼接,将需要替换的数据放入元组即可。execute()还会根据数据类型,自动为字符串数据添加引号。
注意:使用占位符占位时,无论何种数据类型只能使用“%s”,不能使用%d、%f等,execute()方法能够自动识别。
技术图片

3.15.9. PyMySQL使用步骤
1)连接数据库:connect(host, user, password, database, port)
2)获取游标 conn.cursor()
3)执行sql语句(增删改查,sql注入)
4)确认提交:commit(),增加、修改和删除数据时,需要确认提交
5)关闭游标
6)关闭数据库

python进阶(十三、mysql:PyMySQL)

标签:logs   database   标识   处理   三引号   取值   有一个   一个   har   

原文地址:https://www.cnblogs.com/bdzxh/p/14102822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!