我在脚本的一部分中使用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()会导致抛出相同的错误,但是在新调用的行上...
更新:我在同一个端口上使用两个连接,这会影响到什么吗?
答案 0 :(得分:0)
在第一次执行调用后尝试执行connection2.commit()
。编辑:以及随后的每一个。
您也可以在每次执行后调用connection2.autocommit(True)
让它提交。
每次提交后,您可能需要调用cursor2.close()
然后调用cursor2 = connection2.cursor()
。
答案 1 :(得分:0)
尝试在创建表后提交cursor2,然后在提交cursor2
后打开cursor1