每个 cursor.execute() 之后是否需要 connection.commit()?
Is connection.commit() needed after each cursor.execute()?
在执行 connection.commit()
之前多次对 cursor.execute(…)
进行有效的 PyMySQL 操作是否有效,或者 connection.commit()
是否需要在每个执行语句之后发生才能得到结果妥善保存?这个想法是尽可能多地消除冗余语句,因为这个过程很长-运行.
代码结构:
with connection.cursor() as cursor:
…
cursor.execute(SQLtype1, rowToInsert)
cursor.execute(SQLtype2, otherToInsert)
connection.commit() # does this account for both execute statements, or just the last?
我查看了以下内容:
PyMySQL execute/commit example,但只有一个例子只有一个执行语句。
Python MySQLdb example,但有一个示例显示每个执行语句后的提交
,在提交之前显示多个执行语句,但不确定 SQLite 是否处理不同
注意: 由于 SQL 查询不同,executemany
似乎不是一个选项。
不,那是 cursor.commit()
的预期目的。您所描述的是自动提交,它可能会或可能不会为您的数据库驱动程序启用。请查看其文档以确定。
如果您的第一个查询成功但第二个查询失败,您可能不希望您的数据库处于损坏状态,即某些行已插入但其他行未插入。您执行的所有更改都会暂存,直到您使用 cursor.commit()
将它们提交到数据库。这允许您一次执行多个查询,并在其中一个查询失败时自动回滚更改。
在执行 connection.commit()
之前多次对 cursor.execute(…)
进行有效的 PyMySQL 操作是否有效,或者 connection.commit()
是否需要在每个执行语句之后发生才能得到结果妥善保存?这个想法是尽可能多地消除冗余语句,因为这个过程很长-运行.
代码结构:
with connection.cursor() as cursor:
…
cursor.execute(SQLtype1, rowToInsert)
cursor.execute(SQLtype2, otherToInsert)
connection.commit() # does this account for both execute statements, or just the last?
我查看了以下内容:
PyMySQL execute/commit example,但只有一个例子只有一个执行语句。
Python MySQLdb example,但有一个示例显示每个执行语句后的提交
注意: 由于 SQL 查询不同,executemany
似乎不是一个选项。
不,那是 cursor.commit()
的预期目的。您所描述的是自动提交,它可能会或可能不会为您的数据库驱动程序启用。请查看其文档以确定。
如果您的第一个查询成功但第二个查询失败,您可能不希望您的数据库处于损坏状态,即某些行已插入但其他行未插入。您执行的所有更改都会暂存,直到您使用 cursor.commit()
将它们提交到数据库。这允许您一次执行多个查询,并在其中一个查询失败时自动回滚更改。