【问题标题】:Does a commit on a Python MySQLdb cursor affect transactions in progress in another cursor?Python MySQLdb 游标上的提交是否会影响另一个游标中正在进行的事务?
【发布时间】:2012-05-17 18:11:41
【问题描述】:

如果我有多个从同一个数据库连接生成的游标(例如,每个游标在不同的线程中),一个游标上的提交(例如在 Python 中:cursor.execute('COMMIT'))是否会影响正在进行的事务同一连接中的另一个光标?如果是这样,我是否应该总是每个数据库连接只有一个游标,以避免这样的交叉游标问题? (另外,如果您知道,这是否也适用于 Google Cloud SQL?)

提前感谢您的任何建议。

【问题讨论】:

    标签: python mysql google-app-engine mysql-python google-cloud-sql


    【解决方案1】:

    大概吧。 MySQLdb 指定 threadsafety- 属性为 1,这意味着您不应在没有手动同步的情况下在多个线程上共享连接(以及游标)。

    您最好使用某种形式的连接池。

    【讨论】:

    • 试用也证实了。
    【解决方案2】:

    在 Google Cloud SQL 中,每个数据库连接一次只能有一个光标。在服务器端,每个连接都有一个数据结构来跟踪当前的事务/查询。如果您有多个光标,它们会相互踩踏。

    我建议在每个 http 请求开始时打开一个连接并在最后关闭它。这是some sample code

    【讨论】:

    • 谢谢肯。您的代码示例很有帮助,但如果跨线程共享连接很危险,那么包装器是否应该重用相同的连接?
    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多