【发布时间】:2012-11-30 13:55:12
【问题描述】:
假设我们有一个 SQL 语句,它只需要在对 DB 执行之前使用参数完成。例如:
sql = '''
SELECT id, price, date_out
FROM sold_items
WHERE date_out BETWEEN ? AND ?
'''
database_cursor.execute(sql, (start_date, end_date))
如何获取解析并执行的字符串?,如下所示:
SELECT id, price, date_out
FROM sold_items
WHERE date_out BETWEEN 2010-12-05 AND 2011-12-01
在这个简单的情况下,它不是很重要,但是我还有其他更复杂的 SQL 语句,出于调试目的,我想自己在我的 sqlite 管理器中执行它们并检查结果。
提前致谢
【问题讨论】:
-
您不想自己构建字符串的任何具体原因?
-
我在某处读到最好使用替换方法。不记得为什么。
-
据称,担心的是SQL注入。我猜如果你想调试你的查询,它还没有投入生产,所以你真的需要担心吗?
-
它是保存(搜索:sql injection),在某些情况下,数据库能够“重用”带有其他参数的查询,而它必须对全新的查询做更多的工作跨度>
-
我猜它还会在需要时为字符串添加“...”。事实是,我想避免为以后的生产重构代码。此外,正如 Argeman 所指出的,在某些情况下,将查询结构与数据分开是很有趣的。