我有一些麻烦,在MySQL数据库中更新一行。这里是代码我试图运行:

import MySQLdb

conn=MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname")
cursor=conn.cursor()

cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100")
cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100")
results = cursor.fetchall()

for row in results:
    print row[0]

print "Number of rows updated: %d" % cursor.rowcount

cursor.close()
conn.close()

当我运行此程序我得到的输出是:

  

4行的结果,更新数:1

这似乎是它的工作,但如果我从MySQL命令行界面(CLI)查询数据库,我发现它没有更新的。然而,如果从CLI我进入UPDATE compinfo SET Co_num=4 WHERE ID=100;数据库更新预期。

什么是我的问题吗?我在Windows机器上运行的Python 2.5.2与MySQL 5.1.30。

有帮助吗?

解决方案

我不能肯定,但我将你正在使用InnoDB表猜测,你有没有做过一个承诺。相信MySQLdb的自动启用交易。

调用conn.commit()

呼叫close

从FAQ:与1.2.0开始,MySQLdb的默认禁用自动提交

其他提示

MySQLdb的已通过默认,其可在第一是混乱自动提交关闭。您的连接存在于它自己的事务,你将无法看到你从其他连接让你提交之前,该事务的变化。

您可以通过设置conn.commit()创建连接对象后立即做conn.autocommit(True)的更新语句之后,正如其他人所指出的,或禁用此功能完全。

您需要手动提交更改或转动自动提交上。

原因SELECT返回修改(但不保留)数据是因为连接仍然是在同一事务中。

我发现Python的连接器自动关闭自动提交关闭,有没有出现任何的方式来改变这种行为。当然,你可以打开它,但后来看着查询日志,它愚蠢做了两个无谓查询后连接关闭自动提交,然后重新开启。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top