在MySQLdb游标上执行多个语句

时间:2014-12-09 03:19:35

标签: python mysql cursor mysql-python

我希望使用 MyISAM 存储在数据库上的MySQLdb光标上执行多个语句。我按照answer和其他地方解释的其他方式,但没有成功。

>>> import MySQLdb as mdb
>>> from contextlib import closing

>>> con = mdb.connect('host', 'user', 'password', 'database')

>>> with closing(con.cursor()) as cur:
>>>     cur.callproc('add_date', [1418112000])
>>>     cur.callproc('add_date', [1418119000])
>>>     #con.commit()
>>>     cur.close()

_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")

由于表的存储是 MyISAM ,我不需要调用commit()。事实上,如果我拨打commit(),我将遇到错误。

调用多个语句的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

调用该过程后,您必须关闭游标并再次打开它,然后再使用它执行另一个语句:

cur.close()

cur = con.cursor() 

可以在fetchall()后立即关闭光标。结果集仍然存在并且可以循环。您必须在调用存储过程后清理/关闭游标,以便执行更多的sql代码。这不是Python的问题,而是MySQL的问题。