我有一个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然后重新输入。这两个选项都很差。
任何帮助都将不胜感激。
答案 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()