数据库不会使用 MySQL 和 Python 自动更新

新手上路,请多包涵

我在更新 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。

原文由 Ian Burris 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
2 个回答

我不确定,但我猜你正在使用 INNODB 表,而且你还没有提交。我相信 MySQLdb 会自动启用事务。

在调用 conn.commit() 之前调用 close

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

原文由 Zoredache 发布,翻译遵循 CC BY-SA 3.0 许可协议

MySQLdb 默认关闭自动提交,一开始可能会让人感到困惑。您的连接存在于它自己的事务中,在您提交该事务之前,您将无法看到您从其他连接所做的更改。

您可以像其他人指出的那样在更新语句之后执行 conn.commit() ,或者在创建连接对象后立即通过设置 conn.autocommit(True) 来完全禁用此功能。

原文由 ʞɔıu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题