我正在使用python flask将db.execute写入sql数据库。 我需要为输入[C4,C5,C6,C7,C8,C9,D7,D8,D9,D4,D5,D6,E7,E8,E9,E4,E5,E6]做下面的代码(所以继续更换C4与其他输入) 使用最少的更改复制和粘贴下面的代码似乎效率不高,但我找不到循环的方法。如何为上面的列表做一个循环?
C4 = request.form.get("C4")
db.execute("UPDATE user_table SET C4 = :C4 WHERE id = :id", id= session["user_id"], C4=C4)
答案 0 :(得分:0)
您可以通过手动构建查询(听起来很脆弱,我同意)收集设置条件和查询参数来一次更新这些字段:
fields = ["C4", "C5", "C6", "C7", "C8", "C9", "D7", "D8", "D9", "D4", "D5", "D6", "E7", "E8", "E9", "E4", "E5", "E6"]
query = "UPDATE user_table SET "
conditions = []
params = {}
for field in fields:
conditions.append(" {field} = :{field} ".format(field=field))
params[field] = request.form.get(field)
query += ", ".join(conditions) + " WHERE id = :id"
db.execute(query, id=session["user_id"], **params)
那个fields
定义 - 看看你是否可以避免硬编码列表并从request.form
对象或其他地方动态获取它。
请注意,我们仍在正确地对查询进行参数化(除了无法参数化的列/字段名称之外 - 请确保您信任fields
的来源以避免潜在的SQL injections)。
并且,考虑使用像SQLAlchemy这样的ORM(因为你使用的是Flask - 请查看Flask-SQLAlchemy
) - 在这样的情况下更新模型会更简单,更易读,更不容易出错它