当我尝试使用以下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数据库包装器有关?
我试图搜索整个互联网,没有运气。 :(
答案 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)