我正在尝试使用python的db api组装以下sql语句:
SELECT x FROM myTable WHERE x LIKE 'BEGINNING_OF_STRING%';
其中,字符串的开头应该是python变量,以便通过db api安全地填充。我试过了
beginningOfString = 'abc'
cursor.execute('SELECT x FROM myTable WHERE x LIKE '%s%', beginningOfString)
cursor.execute('SELECT x FROM myTable WHERE x LIKE '%s%%', beginningOfString)
我没有主意了;正确的方法是什么?
3条答案
按热度按时间kqhtkvqz1#
注意sqlite3文档:
通常,sql操作需要使用python变量中的值。您不应该使用python的字符串操作来组装查询,因为这样做是不安全的;它使您的程序易受sql注入攻击。
相反,使用dbapi的参数替换。放?作为占位符,然后提供一个值元组作为游标execute()方法的第二个参数(其他数据库模块可能使用不同的占位符,例如%s或:1。)例如:
我想你想要这个:
kpbpu0082#
如果可以,最好将参数与sql分开。然后您可以让db模块负责正确引用参数。
qzlgjiam3#
编辑:
正如brian和thomas所指出的,更好的方法是使用:
因为第一种方法使您容易受到sql注入攻击。
历史遗留问题:
尝试: