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


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

查看所有标签

猜你喜欢:

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

Web站点优化

Web站点优化

金 / 2009-10 / 55.00元

《Web站点优化》为您提供有效的策略以及精准的技术,让您的网站吸引更多用户,并成功地将他们都转换为最终的购买者。这绝对是现在网络营销成功之路上的指明灯!几年前,所谓“优化过”的网站不过是指加载速度快、兼容绝大多数浏览器而已。而现在,为了提升商业竞争力,网站优化需要做的远不止这些:它需要吸引客户、与客户交互以及说服客户等。 《Web站点优化》就为您提供了众多来自首席专家们的意见,囊括了在线营销......一起来看看 《Web站点优化》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

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

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器