想 while 循环检查数据库字段的改变,发现不重新初始化数据库连接,不能查询到最新的数据库

2017-08-17 11:32:47 +08:00
 warcraft1236

我是用的 pymysql 这个库,大体的代码逻辑如下:

...
做了一些事情,这些事情会导致数据库某个字段的值会改变
...

a=usermysql() # 自定义类的 __init__方法,pymysql.connect 和创建 cursor
while True:
	a.execute() 
    result = a.fetchone()
    if result == 'WORKING': # 执行语句,获取需要的字段的值,如果值变成了想要的,就退出循环,做接下来的任务
    	break

然而运行的时候,发现获取到的字段的值并不会变化,只有在 while 循环里初始化数据库的连接,才能获取到最新的数据库的值

请问这是为什么呢?

2430 次点击
所在节点    Python
6 条回复
siteshen
2017-08-17 12:40:41 +08:00
数据库配置记录所有的查询,查看数据库 log 看请求有没有被数据库处理。
没有的话,查 execute 的文档,看是不是使用了类似执行过就不执行的机制。
albertofwb
2017-08-17 12:40:52 +08:00
仅仅从你 po 的这段 snippet 并不能看出问题,上源码链接吧
warcraft1236
2017-08-17 12:48:32 +08:00
@albertofwb 理论上,同一个语句,不同时候执行,返回的结果应该都是数据库里边最新的数据是吗?
QAPTEAWH
2017-08-17 12:59:18 +08:00
"MVCC"

开启 autocommit,或者每次查完 commit。
warcraft1236
2017-08-17 13:03:53 +08:00
@QAPTEAWH 能不能详细给讲一下呢?
sujin190
2017-08-17 13:24:16 +08:00
pymysql 默认的 autocommit 是 false,不 commit 是不能查询到新的数据的,你可以设置为 true 或者每次查询完 commit

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383621

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX