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


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

查看所有标签

猜你喜欢:

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

点石成金

点石成金

[美] 克鲁格 (Steve Krug) / 蒋芳 / 机械工业出版社 / 2015-1-1 / CNY 59.00

《点石成金:访客至上的Web和移动可用性设计秘笈(原书第3版)》是一本关于Web设计原则而不是Web设计技术的书。《点石成金:访客至上的Web和移动可用性设计秘笈(原书第3版)》作者是Web设计专家,具有丰富的实践经验。他用幽默的语言为你揭示Web设计中重要但却容易被忽视的问题,只需几个小时,你便能对照书中讲授的设计原则找到网站设计的症结所在,令你的网站焕然一新。一起来看看 《点石成金》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具