bgu*_*ach 13 python sql sqlite
假设我们有一个SQL语句,只需要在对DB执行之前用参数完成.例如:
sql = '''
SELECT id, price, date_out
FROM sold_items
WHERE date_out BETWEEN ? AND ?
'''
database_cursor.execute(sql, (start_date, end_date))
Run Code Online (Sandbox Code Playgroud)
如何获取解析和执行的字符串?,如下所示:
SELECT id, price, date_out
FROM sold_items
WHERE date_out BETWEEN 2010-12-05 AND 2011-12-01
Run Code Online (Sandbox Code Playgroud)
在这个简单的情况下,它不是很重要,但我有其他更复杂的SQL语句,为了调试目的,我想在我的sqlite管理器中自己执行它们并检查结果.
提前致谢
hol*_*web 17
UPDATE.我从这个网页上了解到,从Python 3.3开始,您可以触发已执行SQL的打印
connection.set_trace_callback(print)
Run Code Online (Sandbox Code Playgroud)
如果您想恢复静默处理,请使用
connection.set_trace_callback(None)
Run Code Online (Sandbox Code Playgroud)
您可以使用其他功能代替print.
SQLite实际上从未将参数替换为SQL查询字符串本身; 参数的值在执行命令时直接读取.(格式化这些值只是为了将它们再次解析为相同的值,这将是无用的开销.)
但是如果你想知道如何在SQL中编写参数,你可以使用该quote函数 ; 这样的事情:
import re
def log_and_execute(cursor, sql, *args):
s = sql
if len(args) > 0:
# generates SELECT quote(?), quote(?), ...
cursor.execute("SELECT " + ", ".join(["quote(?)" for i in args]), args)
quoted_values = cursor.fetchone()
for quoted_value in quoted_values:
s = s.replace('?', quoted_value, 1)
#s = re.sub(r'(values \(|, | = )\?', r'\g<1>' + quoted_value, s, 1)
print "SQL command: " + s
cursor.execute(sql, args)
Run Code Online (Sandbox Code Playgroud)
(如果?不存在参数,则此代码将失败,即在文字字符串中.)
| 归档时间: |
|
| 查看次数: |
8883 次 |
| 最近记录: |