Python的sqlite3模块是否支持预处理语句? 我一直在谷歌搜索,但是,我找不到任何关于如何实现预准备语句的例子。如果是这样,您能否提供一段显示其用法的代码?
答案 0 :(得分:-1)
看起来sqlite3使用参数替换:
通常,您的SQL操作需要使用Python中的值 变量。您不应该使用Python的字符串汇编查询 因为这样做是不安全的;它使你的程序 容易受到SQL注入攻击(请参阅https://xkcd.com/327/) 什么可能出错的幽默例子。)
相反,请使用DB-API的参数替换。放?作为一个 占位符,无论您想要使用哪个值,然后提供元组 value作为游标的execute()方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如%s或 :1。)例如:
# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
# Larger example that inserts many records at a time
purchases = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
('2006-04-05', 'BUY', 'MSFT', 1000, 72.00),
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
]
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', purchases)
这将实现我所寻求的目标。结束这个问题。