flask mysql db.execute循环

时间:2017-12-06 04:57:14

标签: python mysql

我正在使用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)

1 个答案:

答案 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) - 在这样的情况下更新模型会更简单,更易读,更不容易出错它