项目场景:
python3.6,windows,mysql问题描述:
在本地远程连接mysql数据库,用的是pymysql,我本地创建了两个连接,分别是pymysql的,另一个是用Popen创建的命令行的客户端,我先创建的pymysql的客户端进行查询,然后利用Popen的客户端进行插入数据,然后在用之前创建的pymysql的客户端进行数据的查询,然后我发现,查询到的结果为空,但是我手动查询能查得到,以为sql写错了,拿程序运行的sql去查询,发现并没有问题,然后我怀疑是因为客户端的问题,然后我在查询时,重新创建了一个客户端,发现就能查询到数据了,这很奇怪,难道mysql的事务还能这样,我抱着怀疑的态度查询了一下资料原因分析:
MySQL默认事务隔离级别是 REPEATABLE READ,当我在本地 Popen中利用SQL插入用户数据 后,Pymysql连接端的事务A不会读取到Pepen连接端更新的事务B,即便事务B已提交,而事务A每次查询到的数据都是最开始创建事务查询到结果的快照,事务A一直没进行更新。
更详细的解释说明,可参考文末列出的网上资料
解决方案:
1:修改MySQL的事务隔离级别2:每次查询操作后,都进行 commit() 提交事务。
3:Python创建pymysql连接时,设置 autocommit=True ,即让其操作后自动提交事务(**推荐使用**)。