2013-07-05 30 views
0

我試圖把一列名到一個SQL查詢正是如此Python的SQLITE3曲解參數

import sqlite3 
db = sqlite3.connect('path/to/my/database.sqlite') 
cur = db.cursor() 

def get_val(field): 
    return cur.execute(''' 
     SELECT x, y, :field FROM literal_table 
     WHERE 
      :valid_field_name > 0 AND 
      (some other conditions) 
     GROUP BY x, y''', 
     {'field': field}).fetchall() 

get_val('valid_field_name') 

但是當我執行,而不是從抓列值的代碼,Python是返回

[(x1, y1, u'valid_field_name'), (x2, y3, u'valid_field_name'), ...] 

我知道你不能對錶名進行編碼,但列名的參數化文檔中有例子。我一起使用字符串格式化(用於私人數據處理的代碼,因此SQL注入不是問題),但我需要了解發生了什麼!

我正在使用Python 2.7.3

+1

我沒有看到問題,代碼是做什麼應該做的。請注意,您正在返回'cur.execute' sql查詢的結果,並且這是一個元組。 –

+0

文檔中有哪些示例? –

+0

看起來我太快讀了文檔; 'select?'存在,但不是'select?從......開始。 –

回答

1

SQLite用提供的值替換參數。 在你的情況,這將是一樣的:

SELECT x, y, 'valid_field_name' FROM literal_table 
WHERE 'valid_field_name' > 0 AND (some other conditions) 
GROUP BY x, y 

換句話說,字符串是字符串;不可能將參數作爲列名稱。