我在尝试执行SQLite3查询时遇到语法错误。问题是因为变量inputPattern包含&#39。s。
功能是:
def searchForExactEnglishToCzechTranslation(inputPattern,db):
if "\'" in inputPattern:
inputPattern.replace("'","''")
result = db.execute("SELECT czech FROM translations WHERE english='%s'" % (inputPattern)).fetchall()
我试图更换标志'但仍然没有工作。
你能给我一个建议吗?感谢
答案 0 :(得分:5)
不要使用插值;使用SQL参数:
def searchForExactEnglishToCzechTranslation(inputPattern,db):
result = db.execute("SELECT czech FROM translations WHERE english=?",
(inputPattern,)).fetchall()
这需要引用(?
未被引号括起来)和转义。
引用sqlite3
module documentation:
通常,您的SQL操作需要使用Python变量中的值。你不应该使用Python的字符串操作来组装你的查询,因为这样做是不安全的;它使您的程序容易受到SQL注入攻击(请参阅http://xkcd.com/327/以获取可能出错的幽默示例)。
相反,请使用DB-API的参数替换。将
?
作为占位符放在要使用值的位置,然后提供值元组作为游标execute()
方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如%s
或:1
。)