2

%文字を含む必要があるmysqlクエリを実行しようとしています...クエリを作成しているときに、%を使用してPythonを変数として固定しようとすると、Pythonの問題が発生します。

statmt="select id from %s WHERE `email` LIKE %blah%" % (tbl)
self.cursor.execute(statmt)

これは自然に次のようにバーフします:

statmt="select id from %s WHERE `email` LIKE %blah%" % (tbl)
TypeError: not enough arguments for format string

Pythonがこれを変数として読み取るのをやめ、文字列の一部として取り込むように、これをどのように修正する必要がありますか?

ありがとう!

4

4 に答える 4

7

%Pythonフォーマット式内にリテラルが必要な場合は、次を使用し%%ます。

statmt="select id from %s WHERE `email` LIKE '%%blah%%'" % (tbl)

ドキュメントセクション5.6.2を参照してください。詳細については、文字列フォーマット操作を参照してください。

于 2012-08-22T20:22:21.903 に答える
2

文字列補間を使用する必要はありません。executeメソッドがそれを処理するので、代わりにこれを行うことができます。

statmt="select id from %s WHERE `email` LIKE %blah%"
self.cursor.execute(statmt, tbl)
于 2012-08-22T20:22:31.083 に答える
2

パーセント記号をエスケープする必要があります%%

文字列補間の代わりに、?パラメータ化されたクエリを使用する必要があります。,

于 2012-08-22T20:22:36.057 に答える
1

あなたが使用することができますstr.format

statmt="select id from {tbl} WHERE `email` LIKE %blah%".format(tbl=tbl)

SQLインジェクションの脆弱性を作成していないことを確認してください。

于 2012-08-22T20:22:35.803 に答える