py mysql 字符串报错_python进阶(十四、mysql:PyMySQL)

3.mysql数据库

3.15 使用python操作mysql数据库(PyMySQL)

3.15.1. PyMySQL的安装

1)使用命令安装:pip install pymysql

2)使用Pycharm安装

43719c858b63192b19468d884588ee02.png

9344643e3d37cf0e6d2e2fdbb9fcbd72.png

e91d502bf6ac87f1132f63142a03793d.png

3.15.2. python连接数据库

1)参看参数

3d5eae30b7abcd1ee0615dea848d54cd.png

7549d24e7b06e2b7ab84eb14c7883318.png

e5992b4516eaa20bdaa426b3b5581f06.png

a4a3fb7fdabf62ff2a986408407b8536.png

2)创建连接和获取数据

ef5d1ba4af53f80ceffdae654023ceb7.png

c93eb71d256aadf8a414bff4c3ae431d.png

3)异常处理

mysql语句错误时,会将错误信息传给python,并报错

465ec847b61ced594c01eff0322ab588.png

可以使用异常处理,处理mysql语句错误

cd158e4542064602cc971985bdce214b.png

4)关闭游标和连接

使用完数据库,要关闭游标和连接,释放资源

354fb2a7d51d02ac833c2527daa81271.png

3.15.3. 数据的增删改

1)数据添加

(1)书写执行语句时,注意sql语句内部的字符串标识要与外边的标识区分开

(2)修改数据的数据要执行commit()才能真正写入数据库

94b8555f80bb2d46d0278351016c7777.png

2)数据修改

b3124fc41ae4bfbb25ed149629943215.png

3)数据删除

a9a27893f5bbbea07843f21d2a3f622a.png

3.15.4. 数据查询

1)fetch

fetchone():获取一条数据

fetchmany(n):获取n条数据,可用于分页显示

fetchall():获取全部数据

2af3e7bd50e19ab6f69280f00c764ab9.png

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

2f8185bfa563d418801d54c1fd3ac2a0.png

3)指定fetch输出类型是字典:

cursor=pymysql.cursors.DictCursor

33896e57e3ba4bbc9786c32b0f83f07e.png

4)rowcount:是一个只读属性,返回执行execute()方法后影响的行数。

35f0d4d0400fe5bfde0eb9df0e232f39.png

可以使用rowcount循环读取fetchone数据

77e1cd20b3b61bb10db7fe902cfddea4.png

3.15.5. 数据回滚:rollback

在执行多行语句时,如果其中某行语句出现错误,将前面已经执行成功的语句也撤销,这个过程称为数据回滚。数据回滚可以保证数据的安全和完整性。

cb4c162c49f6edc4d57edbcbb6d6e639.png

注意:使用数据回滚时,commit()方法一定要写在try语句的最后。

如果提前使用commit()方法将数据写入数据库,然后再报错,rollback无法删除已经写入数据库中的数据。

rollback只能清除内存中的修改,无法修改数据库中的数据。

3.15.6. 表操作

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

7dbfa6b6a7ac0f9ba77ef515ad68823a.png

77736b1f1340b0b6672837efa072f29e.png

3.15.7. 将mysql语句写入字符串,在执行

d6728be10bc65fe6cddb3bed9858a8de.png

使用三引号(”””)定义字符串可以换行,方便书写

3.15.8. sql注入(重点)

1)在sql语句中,遇到“;--”后面的语句就被忽略了

7bb3ff38a970fd9e72a783793c5ecaf2.png

2)使用mysql保存用户名和密码,登录验证时,会使验证失效

(1)数据库中创建用户信息表,并添加用户名和密码

1f020eee82f0e5d580182cd6ae7f1132.png

(2)在python中,判断用户输入的用户名和密码,是否与数据库中的数据相同

49837eb1181fb34a76ca71a4a592e717.png

(3)异常输入时,也可以登陆成功

只知道用户名,不知道密码,可以登陆成功

a9cb417f4964ca12007edd0c7319919c.png

因为mysql执行到“;-- ”后,不在执行后面的语句了。

注意: “;-- ”后面有一个空格

输入时加入or 1=1,用户名和密码都错误依然可以登录成功

809277bbca139d43d47bdcdcc65bbbd6.png

3)解决方法

定义字符串时,只需要用占位符(%s)占位;然后使用execute()方法实现拼接mysql语句的拼接,将需要替换的数据放入元组即可。execute()还会根据数据类型,自动为字符串数据添加引号。

注意:使用占位符占位时,无论何种数据类型只能使用“%s”,不能使用%d、%f等,execute()方法能够自动识别。

c950da089e7117a39c1a09225d97c155.png

3.15.9. PyMySQL使用步骤

1)连接数据库:connect(host, user, password, database, port)

2)获取游标 conn.cursor()

3)执行sql语句(增删改查,sql注入)

4)确认提交:commit(),增加、修改和删除数据时,需要确认提交

5)关闭游标

6)关闭数据库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值