0

当我尝试使用以下 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 raise errorclass, errorvalue ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that对应您的 MySQL 服务器版本,以便在第 1 行的 ''20'' 附近使用正确的语法")

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

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

4

1 回答 1

2

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

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

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

反过来,这可能是由 MySQLdb 库中的错误引起的,或者 - 也许 - 赋予count变量的错误值:字符串'20'(带有引号作为它的一部分)而不是数字 20。我承认,这两种情况对我来说似乎都不太可能.

你能用硬编码的文字代替 来测试这个查询count吗?喜欢...

db.query("SELECT * FROM users ORDER BY created_at DESC LIMIT %s", 20)
于 2012-08-23T16:12:19.523 回答