在Python中格式化SQL查询而不执行

3 投票
1 回答
632 浏览
提问于 2025-04-17 03:14

Python有很多库可以和数据库进行交互,这些库提供了一种很好的方式来构建SQL查询,而不用担心SQL注入的问题。例如,使用sqlite3:

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语句,但我并不想在特定的数据库上运行这些语句,只是想保存起来以备后用。)

1 个回答

5

必须有一种方法可以获取格式化的查询,而不需要实际连接到数据库并执行它们。

其实并没有。

关系型数据库管理系统(RDBMS)内部使用“预处理查询”和“绑定变量”来处理这个问题。所谓的“格式化”其实并不存在,任何地方都没有。

撰写回答