python - 无法在 pymysql 中正确格式化 sql

标签 python mysql pymysql

我要的是执行sql 从作者喜欢“%steven%”的文章中选择 *

为了安全起见,我是这样使用的:

cursor.execute('select * from articles where %s like %s', ('author', '%steven%')

那么结果就是空的,不是语法错误,而是空集。 但我很确定里面有东西,我可以使用第一个 sql 得到结果。我的代码有什么运行吗?

最佳答案

您不能在where %s like %s 处将列名称设置为参数。要动态设置列名,您需要进行实际的字符串操作,例如:

sql = 'select * from articles where '+ sql_identifier('author') +' like %s'
cursor.execute(sql, ('%steven%',))

其中 sql_identifier 是您的库的函数,用于使标识符对 SQL 注入(inject)安全。像这样的东西:

# don't actually use this!
def sql_identifier(s):
  return '"%s"' % s.replace('"','')

但是通过实际测试并了解您正在使用的数据库引擎。

关于python - 无法在 pymysql 中正确格式化 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44937003/

相关文章:

python - Excel 函数 IFERROR(value, value_if_error)。它有等效的 python 吗?

python - 在Python中动态导入类

python - Raspberry Pi WiFi radio 脚本问题

python - 使用 os.forkpty() 创建一个伪终端以通过 ssh 连接到远程服务器并与之通信

python - MAC | Python 脚本运行良好,在终端插入 Mysql 表但无法作为 Cron 作业运行 |苹果

python - pyMySQL 设置连接字符集

c# - 带有 Mysql 和 NullReferenceException 的 Entity Framework 6

mysql - 如何更改 phpMyAdmin 中的事件

mysql - 在 mysql 和 oracle 中按查询分组

mysql - 使数千个 SELECT 查询更快