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