以下代码,使用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
两次,然后返回None
)。我应该深入研究这个方向吗?我的意思是,我应该了解这些集合的概念以找到解决问题的方法吗?
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一样…
我正在使用MySQL,我正在定义一个存储过程,如下所示: 当我尝试执行该过程时,会出现以下错误: 这意味着什么,我做错了什么?
问题内容: 我正在尝试执行我的PHP代码,该代码通过mysqli调用两个MySQL查询,并得到错误“命令不同步;您现在不能运行此命令”。 这是我正在使用的代码 我曾尝试阅读此书,但不确定该怎么做。我已经阅读了有关存储结果和免费结果的信息,但是使用它们时并没有什么区别。我不确定此错误的确切原因,并想知道其原因以及如何解决。 按照我的调试语句,由于我的sql语法near附近,甚至没有输入countQu
问题内容: 我已经将注册脚本从mysql转换为mysqli。我作为mysql正常工作,但是现在却给我错误 这是我用来注册用户的功能 电子邮件可以很好地发送来自我的阵列的正确数据。但是,没有数据插入到数据库中,并且出现了上面提到的错误。我以前从未遇到过这个错误。 问题答案: 如果 命令不同步; 您现在无法在客户端代码中运行此命令,您以错误的顺序调用了客户端函数。 例如,如果您使用的是mysql_us
问题内容: 我有一个从Python(包装在Django中)执行的MySQL存储过程。当我尝试执行第二条语句时,出现错误“命令不同步;您现在不能运行此命令”。我目前无法提交交易。当我调用过程时,这只是一个问题。该怎么办? 编辑:我被要求发布MySQL过程。我使它变得非常简单,但我仍然遇到相同的问题 问题答案: 感谢JoshuaBoshi的回答,该问题得以解决。调用该过程之后,我必须关闭游标并再次打开
问题内容: 在我的数据库中,我有一些存储过程。 我想给其中一个打个电话,根据我从此过程中得到的结果,我将确定是否要打第二个天气。 如您所见,我使用的方法 但是仍然在调用其他过程时得到: 这是我对db函数的调用: 问题答案: 每个存储过程至少返回 两个 结果 一个(或多个)实际结果 一个空结果告诉客户没有其他结果。 您必须使用/ 清洁它们。 如果您的过程仅返回一个结果,或者您只想要第一个结果,而不想
我试着从命令行访问mvn。 我试图验证Maven是否如手册所说通过MVN--version进行了良好配置,但结果是: 这会是什么?我是否应该在每次需要变量时导出它们?