我在sqlite3數據庫中有一個寬表,我希望動態查詢Python腳本中的某些列。我知道it's bad to inject parameters by string concatenation,所以我嘗試使用參數替代。在Python sqlite3中替換列名查詢
我發現,當我使用參數替換來提供列名時,我得到了意想不到的結果。小例子:
import sqlite3 as lite
db = lite.connect("mre.sqlite")
c = db.cursor()
# Insert some dummy rows
c.execute("CREATE TABLE trouble (value real)")
c.execute("INSERT INTO trouble (value) VALUES (2)")
c.execute("INSERT INTO trouble (value) VALUES (4)")
db.commit()
for row in c.execute("SELECT AVG(value) FROM trouble"):
print row # Returns 3
for row in c.execute("SELECT AVG(:name) FROM trouble", {"name" : "value"}):
print row # Returns 0
db.close()
有沒有更好的方式來做到這一點不是簡單地注入列名成字符串並運行它?
同意,這就是答案! –
更好:http://stackoverflow.com/questions/6514274/how-do-you-escape-strings-for-sqlite-table-column-names-in-python –