2011-09-27 70 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