python – 避免MySQLdb的“命令不同步的方法”你现在不能运行这个命令“(2014)例外

栏目: Python · 发布时间: 7年前

内容简介:http://stackoverflow.com/questions/4707957/ways-to-avoid-mysqldbs-commands-out-of-sync-you-cant-run-this-command-now

以下代码,使用 python 2.6.6和MySQLdb 1.2.2导致命令不同步;你现在不能运行这个命令MySQLdb异常:

import MySQLdb

conn = MySQLdb.connect( db="test", user="root" )
cursor = conn.cursor( MySQLdb.cursors.DictCursor )

cursor.execute( "BEGIN; CREATE TABLE t1 ( t1_id INT PRIMARY KEY AUTO_INCREMENT ); COMMIT;" )
cursor.execute( "BEGIN; CREATE TABLE t2 ( t2_id INT PRIMARY KEY AUTO_INCREMENT ); COMMIT;" )

在执行第二个查询时引发异常.正如我所看到的,异常通常是由于 MySQL 的C API实现的限制引起的,这不允许并发查询执行.

如果我在上述两个查询之间重新创建了游标对象,问题就是解决了,但不幸的是,解决方案对我来说看起来并不完美.我有一个非常简单的数据库连接和查询执行背景,并且不喜欢在每次查询执行后重新创建游标,因为它将(据我所知)提交当前事务并可能有其他副作用.

因此,我的问题是:避免这种异常的其他方法是什么?如何准备用于执行下一个查询的游标对象?也许Python DB API有一些预期的方法,当使用其他数据库接口时,它将是相对中立的,在MySQLdb的情况下可以解决问题?

提前感谢您的时间和帮助:)

编辑:

在我发布了这个问题之后,我开始阅读Python DB API规范来阅读游标破坏的副作用(我对事务提交不太确定:)),我发现了以下的替代方法:

cursor.execute( "BEGIN; CREATE TABLE t1 ( t1_id INT PRIMARY KEY AUTO_INCREMENT ); COMMIT;" )
while cursor.nextset() is not None: pass
cursor.execute( "BEGIN; CREATE TABLE t2 ( t2_id INT PRIMARY KEY AUTO_INCREMENT );

问题是我不知道它是做什么的(它返回1次,之后没有).我应该朝这个方向发展吗?我的意思是,我应该明白这些集合的概念,找到解决我的问题吗?

DB-API尝试自行处理事务,在第一个命令上启动一个事务,并有自己的API调用来提交它,所以:

cursor.execute( "CREATE TABLE t1 ( t1_id INT PRIMARY KEY AUTO_INCREMENT )" )
cursor.commit()
cursor.execute( "CREATE TABLE t2 ( t2_id INT PRIMARY KEY AUTO_INCREMENT )" )
cursor.commit()

在我看来,这是Python的DB-API的严重的设计错误,使得在事务之外执行命令并对事务进行适当的控制是一个严重的麻烦,例如.使用像 SQLite 的BEGIN EXCLUSIVE TRANSACTION这样的东西.就好像没有真正数据库经验的人被允许设计API …

http://stackoverflow.com/questions/4707957/ways-to-avoid-mysqldbs-commands-out-of-sync-you-cant-run-this-command-now


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

超级IP

超级IP

吴声 / 中信出版集团 / 2016-7 / 49.00元

一切商业皆内容,一切内容皆IP! 从迪士尼、airbnb、YouTube、Instagram到微信、Papi酱、芈月传、鹿晗,IP浪潮席卷全球,这不仅仅是互联网领域的革命,更是未来商业的游戏新规则。 IP从泛娱乐形态快速渗透新商业生态全维度,正深化为不同行业共同的战略方法,甚至是一种全新的商业生存方式,即IP化生存。 超级IP的内核,是辨识度极高的可认同的商业符号,它意味着一种对......一起来看看 《超级IP》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试