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

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

Advanced Web Metrics with Google Analytics, 2nd Edition

Advanced Web Metrics with Google Analytics, 2nd Edition

Brian Clifton / Sybex / 2010-3-15 / USD 39.99

Valuable tips and tricks for using the latest version of Google Analytics Packed with insider tips and tricks, this how-to guide is fully revised to cover the latest version of Google Analytics and sh......一起来看看 《Advanced Web Metrics with Google Analytics, 2nd Edition》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具