2012-03-29 14 views
1

私はsqlite3のpythonモジュールで生成されたSQL文をデバッグしようとしている...sqlite3の印刷、最終的なクエリ

c.execute("SELECT * FROM %s WHERE :column = :value" % Photo.DB_TABLE_NAME, {"column": column, "value": value}) 

私はfetchall()

を行うとき、それが行を返されていません

私はデータベース

SELECT * FROM photos WHERE album_id = 10 

上で直接これを実行すると、私は期待どおりの結果を得ることができます。

問題が何かを確認するために作成されたクエリを表示する方法はありますか?

答えて

2

ここでの問題は、文字列の値が自動的に一重引用符で囲まれていることです。そのように列名を動的に挿入することはできません。

あなたの質問に関しては

、(私がチェックするために、コンピュータで現在はないです)、私はsqlite3のわからないんだけど、MySQLdbはであなたのようなものとして、最終的なクエリを取得することができます:

statement % conn.literal(query_params) 
+0

これはsqliteで動作しないようです: 'sqlite3.Connection'オブジェクトには属性 'literal'がありません –

+0

@RomualdBrunet、あなたは正しいです。私はhttps://code.google.com/p/pysqlite/source/browse/src/を見てきましたが、その目的のためにユーザーになることはありません。 bind_parametersメソッドが必要なsqlite3.Statementがありますが、そのクラスのためのPythonではメソッドがありません。 – newtover

0

あなたができるだけで列値または表名ではなく行値に置換パラメータを使用します。

したがって、の:columnは許可されません。