2012-03-29 53 views
1

我試圖調試與sqlite3 Python模塊生成的SQL語句...sqlite3的使用python - 查詢調試 - 打印最終查詢

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'屬性 – 2013-08-20 13:39:38

+0

@RomualdBrunet,你是​​對的。我看了一下https://code.google.com/p/pysqlite/source/browse/src/,看不到任何可用於此目的的用戶。有sqlite3.Statement應該有一個bind_parameters方法,但沒有方法可用於python的類。 – newtover 2013-08-21 12:24:28

0

您只能對行值使用替代參數,而不是列或表名稱。

因此,不允許:columnSELECT * FROM %s WHERE :column = :value