python在sql查询中避免%s

2024-04-19 20:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从python查询mysql数据库,但是在生成通配符%s和python的%s的查询ebcasue时遇到问题?,但当我运行以下程序时

query = '''select * from db where name like'Al%' and date = '%s' ''', myDateString

我有个错误

^{pr2}$

ValueError:索引36(位置为%)处不支持格式字符“”'(0x27)

如何组合Python2.7字符串构建和sql通配符?(实际查询要长得多,涉及更多变量)


Tags: andnamefrom程序数据库dbdatemysql
3条回答

首先,您需要转义Al附近的百分号:

'''select * from db where name like 'Al%%' and date = '%s''''

另外,遵循最佳实践并将第二个参数中的查询参数传递给execute()。这样,您的查询参数将被转义,并且可以避免sql注入:

^{pr2}$

使用format语法构建Python字符串,使用%s语法生成SQL插值。这样他们就不会互相冲突了。在

两件事:

  1. 不要在SQL查询中使用字符串格式('%s' % some_var)。相反,将字符串作为序列(如列表或元组)传递给execute方法。

  2. 您可以转义%,这样Python就不需要格式说明符了:

    q = 'SELECT foo FROM bar WHERE zoo LIKE 'abc%%' and id = %s'
    cursor.execute(q, (some_var,))
    

相关问题 更多 >