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, "SQL 構文にエラーがあります。対応するマニュアルを確認してください1 行目の ''20'' 付近で使用する正しい構文の MySQL サーバーのバージョン")

SQL スクリプトの何が問題なのか、本当にわかりません。実際、以前の PHP バージョンのサーバーではうまく機能していました。Python バージョンで動作しないのはなぜですか? Tornado データベース ラッパーに関連する特定のものはありますか?

インターネット全体を検索しようとしましたが、うまくいきませんでした。:(

4

1 に答える 1

2

「%s」プレースホルダーを使用しているため、count値 (明らかに 20) が引用符で囲まれます (これにより、クエリは で終了しますLIMIT '20')。'%d'代わりに使用してみてください。

Cole Maclean が言ったように、'%s' 以外のプレースホルダーはここでは使用できません。控えめに言っても、それは私の解決策を少し間違っています。

それでも理由は同じです: LIMIT パラメータは「数値文字列」ではなく数値でなければなりません。しかし、引用符はどういうわけか最後のクエリに到達します。MySQL エラー メッセージは明らかに LIMIT '20' 行についてです。

これは、MySQLdb ライブラリのバグ、または - おそらく - countvariable: string '20'(一部として引用符を含む) に 20 番ではなく誤った値が指定されていることが原因である可能性があります。 .

の代わりにハードコードされたリテラルを使用して、このクエリをテストできますcountか? お気に入り...

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