Python MySQLdb 不释放表锁

2 投票
1 回答
3378 浏览
提问于 2025-04-16 11:28

我有一个程序,它会读取一个文件并把数据插入到数据库里。我正在用Python为这个程序写一个测试工具。这个Python工具会先连接到数据库,获取一些配置参数,然后再生成测试数据。接着,它会等10秒钟,让正在测试的程序有时间处理文件并修改数据库。可是,等到10秒后,如果我尝试从数据库中读取值,却发现这些值并不存在。如果我打开第二个终端,通过命令行检查,结果也是一样的。奇怪的是,当我结束我的Python测试工具时,数据才会被插入到数据库中。看起来是MySQLdb在锁住表,不让我插入数据。我该怎么让MySQLdb释放对表的锁呢?

总结一下,我的工作流程是这样的:

connection = MySQLdb.connect(host="localhost")
cursor = connection.cursor() 
cursor.execute(".....")
cursor.close()
connection.commit()
connection.close()
cursor = None 
connection = None 

sleep(10)

重复以上步骤,检查我的其他程序应该插入的数据。

1 个回答

4

在你执行 cursor.close() 之前,必须先执行 connection.commit()

需要注意的是,MySQL 实际上并不支持游标——Python 的封装工具是模拟游标的。这可能会导致你的代码在一些意想不到的情况下无法正常工作,就像这个例子一样。

撰写回答