PyMysql UPDATE查询

Sha*_*hay 11 python mysql sql-update pymysql

我一直在尝试使用PyMysql,到目前为止我所做的一切(选择/插入),但是当我尝试更新它只是不起作用,没有错误没有什么,只是没有做任何事情.

import pymysql
connection = pymysql.connect(...)
cursor = connection.cursor()
cursor.execute("UPDATE Users SET IsConnected='1' WHERE Username='test'")
cursor.close()
connection.close()
Run Code Online (Sandbox Code Playgroud)

是的我已经仔细检查过Users,IsConnected和Username都是正确的并且测试确实存在(SELECT适用于它)

这是我的问题?

Joe*_*Day 18

当您执行更新时,MySQL会隐式启动事务.您需要connection.commit()在执行更新后通过调用提交此事务,以防止事务在断开连接时自动回滚.

MySQL(至少在表中使用InnoDB引擎时)支持事务,它允许您运行一系列更新/插入语句,然后让它们全部有效地作为单个操作提交,或者回滚以便不应用任何事务.如果未显式提交事务,则在关闭与数据库的连接时将自动回滚.


saa*_*aaj 14

事实上,@ JoeDay上面描述的内容与默认的MySQL事务的行为没什么关系.默认情况下,MySQL在自动提交模式下运行,通常您不需要任何额外的扭曲来保持更改:

默认情况下,MySQL在启用自动提交模式的情况下运行.这意味着只要执行更新(修改)表的语句,MySQL就会将更新存储在磁盘上以使其永久化.无法回滚更改.

PEP-249(DB API)的作者决定通过提出默认禁用自动提交来使事务的开始隐式,从而使事情变得复杂并破坏Python的Zen.

我建议做的是恢复MySQL的默认行为.并且仅在您需要时明确使用事务.

import pymysql

connection = pymysql.connect(autocommit=True)
Run Code Online (Sandbox Code Playgroud)

我也在这里写了一些参考资料.