【发布时间】:2013-12-03 23:49:14
【问题描述】:
我在脚本的一部分中使用 mysqldb 将信息从一个数据库复制到另一个数据库。我拥有的代码的 sn-p 如下:
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() 会导致抛出相同的错误,但与新调用一致...
更新:我在同一个端口上使用两个连接,这会影响什么吗?
【问题讨论】:
-
尝试在大量数据上使用
cursor2.executemany。 -
您能否就如何在这种情况下做到这一点提供一些指导?我需要将 cursor1 中的所有数据提取到某种列表中以传递给 cursor2,对吗?
-
哦,在我的实际代码中,我有这样的构造,我在循环中修改值,所以我认为我不能在这里使用 execute_many。
标签: python sql cursor database-connection mysql-python