mysqldb中的两个连接/游标 - 命令不同步错误

时间:2013-11-20 05:42:44

标签: python sql cursor database-connection mysql-python

我在脚本的一部分中使用mysqldb将信息从一个数据库复制到另一个数据库。我所拥有的代码片段如下:

connection1 = mysqldb.connect('localhost', 'root', 'password', 'old_database')
connection2 = mysqldb.connect('localhost', 'root', 'password', 'new_database')
connection2.autocommit(True)

cursor2 = connection2.cursor()
cursor2.execute("CREATE TABLE IF NOT EXISTS...")
//if I put a cursor2.close() or a connection2.commit() here, that throws the error as well

cursor1 = connection1.cursor()
cursor1.execute("SELECT * FROM old_database.data")
sql = "INSERT INTO new_database.data(a, b) VALUES (%s, %s)"
for row in cursor1.fetchall():
    a, b = row
    data = [a, b]
    cursor2.execute(sql, data)
print "done"
connection1.close()
connection2.close()

我一直收到以下异常: 异常_mysql_exceptions.ProgrammingError :( 2014,“命令不同步;您现在无法运行此命令”) 每当它到达cursor2.execute(sql, data)行。我知道在同一个连接上使用两个游标存在并发问题,但是如何在两个不同的连接上使用两个游标呢?

更新:任何地方都没有多线程。 在连接上添加显式commit()调用或尝试在游标上调用close()会导致抛出相同的错误,但是在新调用的行上...

更新:我在同一个端口上使用两个连接,这会影响到什么吗?

2 个答案:

答案 0 :(得分:0)

在第一次执行调用后尝试执行connection2.commit()。编辑:以及随后的每一个。

您也可以在每次执行后调用connection2.autocommit(True)让它提交。

每次提交后,您可能需要调用cursor2.close()然后调用cursor2 = connection2.cursor()

答案 1 :(得分:0)

尝试在创建表后提交cursor2,然后在提交cursor2

后打开cursor1