我希望使用 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()
,我将遇到错误。
调用多个语句的正确方法是什么?
答案 0 :(得分:0)
调用该过程后,您必须关闭游标并再次打开它,然后再使用它执行另一个语句:
cur.close()
cur = con.cursor()
可以在fetchall()
后立即关闭光标。结果集仍然存在并且可以循环。您必须在调用存储过程后清理/关闭游标,以便执行更多的sql代码。这不是Python的问题,而是MySQL的问题。