转义列名作为查询参数
escaping column name as query parameter
我正在重做一个查询以防止 SQL 注入,但不知道如何转义列名。
此代码无效(示例 1):
cursor.execute(
"UPDATE ttt SET status = 'Good' FROM table ttt WHERE %s = %s';",
('param1', 'param2',))
sql_server_connection.commit()
这会起作用(示例 2):
cursor.execute(
"UPDATE ttt SET status = 'Good' FROM table ttt WHERE param1 = %s';",
('param2',))
我需要将 2 个参数传递给我的查询并以安全的方式进行(以防止 SQL 注入)。
我可以通过传递简单的字符串使其工作,但这不是安全的方法。
如何使用单个 cursor.execute 命令转义列名称和值?
在参数化查询中,参数只能用于提供列 values,而不是列 names。因此,您需要使用字符串操作来插入列名,然后使用参数来指定值。例如,Python3:
column_name = 'param1'
column_value = 'param2'
cursor.execute(f"UPDATE ttt SET status = 'Good' WHERE [{column_name}] = %s", (column_value,))
在Python2
column_name = 'param1'
column_value = 'param2'
sql = "UPDATE ttt SET status = 'Good' WHERE [{}] = %s".format(column_name)
cursor.execute(sql, (column_value,))
我正在重做一个查询以防止 SQL 注入,但不知道如何转义列名。
此代码无效(示例 1):
cursor.execute(
"UPDATE ttt SET status = 'Good' FROM table ttt WHERE %s = %s';",
('param1', 'param2',))
sql_server_connection.commit()
这会起作用(示例 2):
cursor.execute(
"UPDATE ttt SET status = 'Good' FROM table ttt WHERE param1 = %s';",
('param2',))
我需要将 2 个参数传递给我的查询并以安全的方式进行(以防止 SQL 注入)。
我可以通过传递简单的字符串使其工作,但这不是安全的方法。
如何使用单个 cursor.execute 命令转义列名称和值?
在参数化查询中,参数只能用于提供列 values,而不是列 names。因此,您需要使用字符串操作来插入列名,然后使用参数来指定值。例如,Python3:
column_name = 'param1'
column_value = 'param2'
cursor.execute(f"UPDATE ttt SET status = 'Good' WHERE [{column_name}] = %s", (column_value,))
在Python2
column_name = 'param1'
column_value = 'param2'
sql = "UPDATE ttt SET status = 'Good' WHERE [{}] = %s".format(column_name)
cursor.execute(sql, (column_value,))