python - 在各种游标/连接上使用 BEGIN TRANSACTION/ROLLBACK/COMMIT

标签 python database transactions

我想知道当通过各种游标/连接给出各种命令(开始/开始事务、提交等)时,事务的行为如何。即,以下哪组语句实际上引入了单个事务并在最后提交?

connection = pyodbc.connect(...)
cursor = connection.cursor()
cursor.execute('START TRANSACTION')
cursor.execute('INSERT ....')
cursor.execute('COMMIT')

对比

connection = pyodbc.connect(...)
connection.cursor().execute('START TRANSACTION')
connection.cursor().execute('INSERT ....')
connection.cursor().execute('COMMIT')

对比

pyodbc.connect(...).cursor().execute('START TRANSACTION')
pyodbc.connect(...).cursor().execute('INSERT ....')
pyodbc.connect(...).cursor().execute('COMMIT')

(实际上,这些命令分散在我的代码中,我试图找出在哪些级别引入单例)

当然,我可以通过“尝试”在某种程度上找到它,但我更喜欢更权威的答案,这样我知道从现在起一周内不会出现问题。

我正在使用 Python's Database API ,虽然我想这个问题不一定是特定于 python 的。 我可以想象(尽管我确实希望相反)这个问题是特定于数据库的。物有所值:我们使用的是 MsSQL Server 2000。

最佳答案

到目前为止,我想到的是通过使用 Python 的数据库 API 的事务方法连接 来解决我自己的问题,而不是为它们创建游标。我还没有对它进行彻底的测试,我会尽快在此处发布答案。

connection = pyodbc.connect(...)
connection.begin() # superfluous, but for illustration purposes;
cursor = connection.cursor()
cursor.execute('INSERT ....')
connection.commit() # or rollback    

关于python - 在各种游标/连接上使用 BEGIN TRANSACTION/ROLLBACK/COMMIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6477992/

相关文章:

php - 如何将用户上传文件到我的数据库并发送给登录的特定用户?

PHP PDO 异常

python - 在 TensorFlow 中用单位对角矩阵创建下三角

python - scrapy mysql 返回空结果

mysql - 通过覆盖 PHPMyAdmin 导入一些数据库条目

sql-server - 两个查询的效率更高?

mysql - 使用事务执行脚本

sql-server - 为什么在 Sql Server 中使用嵌套事务

python - 带有 OR 语句的 Django 过滤器

python - 我在django中创建对象时使用ForeignKey也是从foreignkey模型创建对象