我有一个python脚本,将原始电影文本文件读入sqlite数据库.
我使用re.escape(title)将转义字符添加到字符串中,以使它们在执行插入之前安全.
为什么这不起作用:
In [16]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='\'Allo\ \'Allo\!\"\ \(1982\)'")
--------------------------------------------------------------------------- OperationalError Traceback (most recent call last)
/home/rajat/Dropbox/amdb/<ipython console> in <module>()
OperationalError: near "Allo": syntax error
Run Code Online (Sandbox Code Playgroud)
然而,这有效(在两个地方删除):
In [17]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='Allo\ Allo\!\"\ \(1982\)'") Out[17]: <sqlite3.Cursor object at 0x9666e90>
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚.我也不能放弃这些主流报价,因为它们实际上是电影片头的一部分.谢谢.
Don*_*ows 104
你这样做是错的.从字面上看.您应该使用参数,如下所示:
c.execute("UPDATE movies SET rating = ? WHERE name = ?", (8.7, "'Allo 'Allo! (1982)"))
Run Code Online (Sandbox Code Playgroud)
就像那样,你根本不需要做任何引用(如果那些值来自任何不受信任的人)你也将100%安全(这里)来自SQL注入攻击.
Ale*_*lli 11
我使用re.escape(title)将转义字符添加到字符串中以使它们安全
注意,re.escape
使字符串重新安全- 与使数据库安全无关.相反,正如@Donal所说,你需要的是Python DB API 的参数替换概念 - 它可以根据需要使"数据库安全".
归档时间: |
|
查看次数: |
30816 次 |
最近记录: |