我正在寻找一个很好的“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/