Mysql + django 异常:“命令不同步;您现在无法运行此命令”

Posted

技术标签:

【中文标题】Mysql + django 异常:“命令不同步;您现在无法运行此命令”【英文标题】:Mysql + django exception: "Commands out of sync; you can't run this command now" 【发布时间】:2012-12-13 11:49:15 【问题描述】:

通过 gunicorn 运行 django 到 RDS (AWS mysql),我在 gunicorn 日志中看到此错误:

Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x690ecd0>> ignored

我还不能可靠地重现它,也无法追踪导致它的底层代码。

我在某些地方使用原始光标,遵循以下模式:

cursor = connections['read_only'].cursor()
sql = "select username from auth_user;"
cursor.execute(sql)
rows = cursor.fetchall()
usernames = []
for row in rows:
    usernames.append(row[0])

在某些地方,我会立即将游标重用于另一个查询 execute() / fetchall() 模式。有时我不会。

我还在某些地方使用原始管理器查询。

我没有明确关闭游标,但我认为我不应该这样做。

除此之外:我没有使用任何存储过程,没有 init_command 参数,也没有在我在这里看到的其他答案中指出任何其他内容。

任何关于如何调试的想法或建议都将不胜感激。

【问题讨论】:

除了显示在日志中之外,此异常是否会给您带来任何实际问题? Python, "commands out of sync; you can't run this command now"的可能重复 【参考方案1】:

查看https://code.djangoproject.com/ticket/17289

您需要执行以下操作:

while cursor.nextset() is not None:
    if verbose:                                                        
        print "rows modified %s" % cursor.rowcount

【讨论】:

这个问题根本没有提到存储过程(就像你提到的票一样)。

以上是关于Mysql + django 异常:“命令不同步;您现在无法运行此命令”的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:“命令不同步”错误(C 连接器)

MySQL 错误 2014 - 命令不同步 - 尝试调用连续存储过程时

命令不同步;在 Mysql 中调用存储过程时,您现在无法运行此命令

MySQL 错误 - 命令不同步;你现在不能运行这个命令

Mysql 错误 #2014 - 命令不同步;您现在无法在存储过程中运行此命令

为啥我在 Django 中收到“MySQL 服务器已消失”异常?