Python,SQLite:'%s'

时间:2014-05-04 14:13:21

标签: python sqlite apostrophe

我在尝试执行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()

我试图更换标志'但仍然没有工作。

你能给我一个建议吗?感谢

1 个答案:

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