微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在各种游标/连接上使用BEGIN TRANSACTION / ROLLBACK / COMMIT

|| 我想知道当通过各种游标/连接给出各种命令(开始/开始事务,提交等)时,事务的行为如何。即,以下哪些语句实际上引入了一个事务并在最后提交?
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的数据库API,尽管我认为这个问题不一定是特定于python的。 我可以想象(尽管我希望相反),这个问题是特定于DB的。物有所值:我们正在使用Mssql Server 2000。     

解决方法

        到目前为止,我想到的是通过在连接上使用Python \的Database API \的事务方法来绕过我自己的问题,而不是为它们创建游标。我尚未进行彻底的测试,我将在此处尽快发布答案。 即
connection = pyodbc.connect(...)
connection.begin() # superfluous,but for illustration purposes;
cursor = connection.cursor()
cursor.execute(\'INSERT ....\')
connection.commit() # or rollback    
    ,        我对pyodbc不确定-我想这取决于您要连接到的特定数据库引擎。不幸的是,似乎很多实现DB API 2.0的模块在其文档中都没有指定事务是特定于连接还是游标,也没有指定DB API 2.0本身的规范(http://legacy.python .org / dev / peps / pep-0249 /) 但是,在几个数据库中,事务包含单个连接上所有游标执行的所有语句(这意味着您的第一个示例和第二个示例都可以使用)。例如,psycopg2文档明确声明了以下内容:   [D]数据库命令将在相同的上下文中执行   事务–不仅是第一个游标发出的命令,而且   由同一连接创建的所有游标发出的游标。 (在http://initd.org/psycopg/docs/usage.html中的“交易控制”下) 同样,MySQL不支持游标-它们在模块的Python级别上进行仿真-因此,根据定义,事务封装了整个连接级别,而不仅仅是单个游标。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?