【问题标题】:Format an SQL query in Python without executing it在 Python 中格式化 SQL 查询而不执行它
【发布时间】:2011-11-26 10:45:08
【问题描述】:

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

【问题讨论】:

  • 我不相信这是 Python 正在做的事情......不是在驱动程序级别使用参数处理的能力吗?即,我会在 ASP.Net 或 Java 中使用完全相同的 SQL 代码来与数据库通信。

标签: python sql sqlite prepared-statement code-injection


【解决方案1】:

必须有一种方法来获取格式化查询,而无需实际连接到数据库并运行它们

不是真的。

RDBMS 在内部使用“准备好的查询”和“绑定变量”来处理这个问题。 “格式化”实际上并不存在。任何地方。

【讨论】:

猜你喜欢
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多