2011-09-27 19 views
1

Python具有與數據庫接口的各種庫,這些庫提供了一種構建SQL查詢的好方法,而不用擔心SQL注入。例如,與sqlite3的:在Python中格式化SQL查詢而不執行它

for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00), 
      ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00), 
      ('2006-04-06', 'SELL', 'IBM', 500, 53.00), 
     ]: 
    c.execute('insert into stocks values (?,?,?,?,?)', t) 

麻煩的是,我不想執行查詢,我只是想格式化並得到查詢作爲字符串。我想我可以自己逃避,但這不是一個非常優雅的解決方案。必須有一種方法來獲得格式化的查詢,而無需實際連接到數據庫並運行它們。

(上下文是我正在寫一個過濾器準備了一系列從輸入的SQL語句,但我不想在特定數據庫上運行它們,只存下來。)

+2

我不相信這是Python正在做的事......是不是能夠使用在驅動程序級別處理的參數?即,我將使用ASP.Net或Java中完全相同的SQL代碼來與數據庫交談。 – mellamokb

回答

5

必須有一種方式來獲得格式化的查詢,而無需實際連接到數據庫,並運行它們

不是真的。

RDBMS使用「預先準備的查詢」和「綁定變量」在內部處理這個問題。 「格式化」實際上並不存在。無處不在。

+1

Woops,我根本不知道這件事,儘管這只是一種方便的方式來處理逃跑。事實證明,這個問題是無關緊要的。今天我學到了一些新東西。 :-)如果其他人對此感到困惑,請參閱:https://secure.wikimedia.org/wikipedia/en/wiki/Prepared_statement – a3nm