如何使用python在SQL中创建动态UPDATE查询



我有一个网页,允许用户更新一些数据,但用户可以更新所有数据或仅更新部分数据,例如,一个用户可以进行以下更新:

{key1: "value", key2: "value", key3: "value"}

但是另一个用户可能只更新密钥1字段。

我的问题是,我如何构建SQL语句,以便更新从用户获得的信息

def update_info(data: dict, id: int):
query : """ 
UPDATE table
SET (the key/value pairs of the data)
WHERE id = %(id)s
"""
data["id"] = id
database_call(query,data)

我问这个问题是因为我知道我可能可以用f字符串来完成,但我担心任何类型的SQL注入,而且收到的数据已经用cerberus进行了验证。

因此,作为使用sql模块的示例:

from psycopg2 import sql
data = {"id": 1, "key1": "value1", "key2": "value2", "key3": "value3"}
update_fields = list(data.keys())
update_sql = sql.SQL("""UPDATE
table
SET
({}) = ({})
WHERE id = %(id)s
""").format(sql.SQL(", ").join(map(sql.Identifier, update_fields)),
sql.SQL(", ").join(map(sql.Placeholder, update_fields)))
cur = con.cursor()
cur.execute(update_sql, data)
con.commit()

这显然没有在你的数据上进行测试,但它应该作为一个粗略的指南来帮助你做什么

最新更新