编程错误1064

时间:2012-08-23 16:08:59

标签: python mysql mysql-error-1064 tornado

当我尝试使用以下SQL从MySQL数据库中获取某些结果时,

entries = db.query("SELECT * FROM users ORDER BY created_at DESC LIMIT %s", count)

我收到了这个错误:

  

文件“/Library/Python/2.7/site-packages/MySQLdb/connections.py”,第36行,在defaulterrorhandler中   提出错误类,错误值   ProgrammingError:(1064,“你的SQL语法有错误;请查看与你的MySQL服务器版本相对应的手册,以便在第1行的''20'附近使用正确的语法”)

我真的不知道我的SQL脚本有什么问题。实际上,它在我以前的PHP版服务器中运行得很好。为什么它在我的Python版本中不起作用?它是否与Tornado数据库包装器有关?

我试图搜索整个互联网,没有运气。 :(

1 个答案:

答案 0 :(得分:2)

您正在使用'%s'占位符,因此count值(显然是20)会被引用(这会使您的查询以LIMIT '20'结尾)。请尝试使用'%d'代替。

好吧,正如Cole Maclean所说,你不能在这里使用非'%s'占位符;至少可以说,这让我的解决方案有点不对劲。

然而原因仍然相同:LIMIT参数应该是一个数字,而不是'数字字符串'。但引号以某种方式达到最终查询:MySQL错误消息显然是关于LIMIT'20'行。

反过来,这可能是由MySQLdb库中的错误引起的,或者 - 或许 - 给count变量的错误值:string '20'(引号作为其中的一部分)代替我承认,这两种情况对我来说都不太可能。

您可以使用硬编码的文字来代替count来测试此查询吗?像...

db.query("SELECT * FROM users ORDER BY created_at DESC LIMIT %s", 20)