python - 使用 Python dbapi 转义 MySQL 保留字

标签 python mysql mysql-python python-db-api

我正在寻找一个很好的“pythonic”和“无 SQL 注入(inject)”解决方案来解决 MySQL 中的保留字问题。

我有以下代码:

alter_sql = 'ALTER TABLE %s ADD COLUMN %s TEXT'      
cursor.execute(alter_sql, sql_params)

当列名类似于“index”、“int”、“limit”...时,就会出现问题

在 MySQL shell 中我可以这样做:

ALTER TABLE test ADD COLUMN test.limit;

ALTER TABLE test ADD COLUMN `limit`;

但不是

ALTER TABLE test ADD COLUMN 'test.limit';

如何使用 Python 和 MySQLdb 实现这一目标?

最佳答案

也许这会起作用:

alter_sql = 'ALTER TABLE `%s` ADD COLUMN `%s` TEXT'

更新:这似乎不起作用,因为这种方式绑定(bind)参数将添加单引号,因为 MySQLdb 认为这是一个字符串文字。

或者,您可以在列名称之前附加表名称吗?

table_name = MySQLdb.escape_string(table_name)
escaped_column_name = MySQLdb.escape_string(column_name)
column_name = '`%s`.`%s`' % (table_name, escaped_column_name)

alter_sql = 'ALTER TABLE %s ADD COLUMN %s TEXT' % (table_name, column_name)

这样,您必须手动转义它们,以避免绑定(bind)它们并在其周围添加单引号。

关于python - 使用 Python dbapi 转义 MySQL 保留字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617656/

相关文章:

mysql - 在 SQL 中查找字符串的替换中间位置

python - 如何通过mysqldb将 Pandas 数据框插入数据库?

python - 用查询结果填充字典

php - 如何从其他php脚本获取数据

python - Numpy索引切片不丢失维度信息

除非我指定路径,否则 Python IDLE 找不到文本文件

python - 如何使用 python 绘制从 RTL SDR 接收到的信号的实时图?

php - 我如何优化这个搜索结构?

mysql - 将 POINT sql 数据转换为 python

python - Tkinter 按钮命令功能动态变量的评估