python - 我可以使用参数插入来指定 MySQL 查询的列名吗?

标签 python mysql mysql-python

我想知道是否可以使用 Python 将列名参数插入到 MySQL 查询中。

考虑以下两个查询,这两个查询都传递给 MySQLCursor.execute()。第一个:

query = (
      'SELECT username, COUNT(*)'
      'FROM `entry`'
      'GROUP BY username;'
)
cursor.execute(query)

第二个:

query = (
      'SELECT %s, COUNT(*)'
      'FROM `entry`'
      'GROUP BY %s;'
)
data = ('username', 'username')
cursor.execute(query, data)

其中第一个返回我期望的结果(对用户名列中出现不同值的次数进行计数),第二个返回意外结果,特别是 [(u'username', n)] 其中 n 是数据库中的总行数。

第二个查询中的问题是参数被查询解释为字符串。有没有办法插入它们以便它们可以被解释为非字符串?我想以一种免受注入(inject)攻击的方式来做到这一点。

最佳答案

不建议使用第二种语法,第一种语法就可以而且安全。

关于python - 我可以使用参数插入来指定 MySQL 查询的列名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54546877/

相关文章:

python - Python 中的并行启动进程串行执行?

python - 扫描由未知字符分隔的两个整数

Python 循环在单独的行上生成输出

mysql - 错误代码 1054 交叉连接上的未知列

具有有效时间间隔的mysql价格处理,限制加入

MySQL 选择日期范围内每个日期不存在相关行的行

mysql - 错误 2006 (HY000) 在第 1 行 : MySQL server has gone away

python - 使用Python从第二个文件的列表中搜索一个文件

python - UPDATE 语句错误 - MySQLdb/Python

python - 无法安装 mysql 客户端 1.3.12 出现 fatal error C1083 : Cannot open include file: 'mysql.h' : No such file or directory