用于替换 sql 的 %s 的变量未被接受

Variable to replace %s for sql is not getting honored

我有一个 table,其中插入了一个空行。后来我想用一些值更新列到行中。我正在尝试编写一个适用于所有列的函数,如图所示

def update_column(field, value):
    print(field, value)
    sql = '''UPDATE `table name` SET %s = %s WHERE `ID` = 1'''
    params = (field,value)
    execute_sql(sql, params)

执行 update_column('fieldName', 10) 时,出现以下错误。感谢任何帮助。

Failed to execute command UPDATE TABLE2 SET %s = %s WHERE ID = 1 in database due to: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''TEST' = 10 WHERE ID = 1' at line 1

不确定字段名称的 %s 是否是 acceptable 用例。如果有人熟悉这种情况,请让我知道我是否遗漏了什么。

为什么不直接使用

def update_column(field, value):
    print(field, value)
    sql = f'''UPDATE `table name` SET {field} = {value} WHERE `ID` = 1'''

然后执行查询? 如果值为字符串,请不要忘记添加引号 喜欢:

sql = f'''UPDATE `table name` SET {filed} = '{value}' WHERE `ID` = 1'''

您不能对列名称(或 table 名称、sql 关键字、表达式、列表等)使用查询参数。

在转义该字符串中的任何文字引号字符后,查询参数被填充为好像它是带引号的字符串。*这就是为什么它以 'TEST' = 10 而不是 TEST = 10 结尾的原因。

对于列名,您必须自己做,没有参数处理。

由您来确保这是安全的。如果您使用反引号,那么您唯一需要做的就是确保您的 field 变量不包含文字反引号字符。

field.replace('`', '')
sql = '''UPDATE `table name` SET `{field}` = %s WHERE `ID` = 1'''.format(field=field)

* Python 也是如此,它在将 SQL 查询提交给服务器之前将参数值插入到字符串中。那不是真正的查询参数;真正的参数离开占位符直到查询被解析。 Python 不支持这种参数。