Flask-SQL Alchemy迭代查询和更新值

时间:2015-10-09 10:17:41

标签: python flask flask-sqlalchemy

我有一个python值列表。我想用这个列表中的值更新我的一个sqllite数据库表的子集。请注意,列表中的值会有所不同,但数据库子集长度和列表长度相等。

我可以使用以下查询访问子集:

query = db.session.query(Sensor).filter(Sensor.experiment_id == pandas_id) # returns n rows where n > 1

但是我如何循环返回的值并根据我的列表更新它们?

我试过了:

my_list = [1, 2, 3, 4, 5]
s = db.session.query(Sensor).filter(Sensor.experiment_id == pandas_id)

for i in my_list:
    s.value = i
    db.session.add(s)

db.session.commit() # does not work

我现在正在考虑删除子集并重新创建它而不是进行更新(看起来非常浪费),或者将所有内容导出到csv然后重新输入。这两个选项都很差。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试在查询对象上设置值,但您需要分别在每个对象上设置它。

您可以使用izip()同时迭代两个序列并分别更新每个对象。类似的东西:

my_list = [1, 2, 3, 4, 5]
query = db.session.query(Sensor).filter(Sensor.experiment_id == pandas_id)

for obj, new_value in itertools.izip(query, my_list):
    obj.value = new_value
    db.session.add(obj)  # I think this line can be removed

db.session.commit()