SQL中如何将待修改属性设置为变量执行UPDATE语句?
报错原因
数据库的参数化查询占位符?仅支持传入查询值,不支持传入列名、表名这类SQL结构标识符。预编译阶段数据库会将?标记的位置识别为值位,你传入的列名会被自动加上引号包裹,最终生成的SQL语法不符合规范,因此触发报错。
修复方案
动态列名需要手动拼接进SQL语句,同时必须加列名白名单校验避免SQL注入风险,值的位置仍保留参数化占位符即可,示例代码如下:
# 替换为你acteurs表中所有允许修改的合法列名 allowed_columns = ["NAME", "AGE", "COUNTRY"] if attribute not in allowed_columns: raise ValueError(f"不允许修改列:{attribute}") # 列名用变量拼接,值仍使用参数化占位符 cur.execute(f""" UPDATE acteurs SET {attribute}=? WHERE IDACTEUR=?; """, (newvalue, actorid)) conn.commit()
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

