Python的sqlite3模块是否支持预处理语句?

时间:2018-02-02 17:10:22

标签: python sqlite prepared-statement

Python的sqlite3模块是否支持预处理语句? 我一直在谷歌搜索,但是,我找不到任何关于如何实现预准备语句的例子。如果是这样,您能否提供一段显示其用法的代码?

1 个答案:

答案 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)

这将实现我所寻求的目标。结束这个问题。