[英]Python updating DB column issue with overwrite?
我有一个简单的功能,它应该为某些用户更新特定的列:
for key, group in groupby(list_i):
print key, type(key), len(list(group)), type(len(list(group)))
setattr(User.query.filter_by(id=key).first(), "number_of_rooms", len(list(group)))
db_session.commit()
我有一个包含数据的列表( list_i
),只需看一下打印:
数据正确,第一个数字是用户的 ID,第二个是应该分配给列number_of_rooms
的值
问题是它将用户的所有值设置为0
。 我认为这是最后一个用户的覆盖问题,我不知道。 问题是如果我将其更改为:
setattr(User.query.filter_by(id=key).first(), "number_of_rooms", 2)
对于所有具有id=key
的用户,它会将值更改为2
,以便该函数起作用。 我在这里很困惑,因为len(list(group))
是一个简单的整数,它应该可以工作。
编辑:
我仔细检查了所有内容,我还使用变量 ( t
) 进行了另一个测试,该变量以 1 递增并添加了一个打印来检查所有内容,它也可以使用变量,这怎么可能?
t = 0
for key, group in groupby(list_i):
print key, type(key), len(list(group)), type(len(list(group)))
my_user = User.query.filter_by(id=key).first()
setattr(my_user, "number_of_rooms", t)
print my_user.number_of_rooms
t+=1
db_session.commit()
number_of_rooms
的值发生变化:
正如Roman Mindlin和glibdud所指定的, list(group)
只能使用一次。 由于group
的类型为<type 'itertools._grouper'>
,在您迭代group
一次之后(例如,通过调用list()
),它就用完了。 关键是将list(group)
保存在一个变量中。
这是解决问题的代码:
for key, group in groupby(list_i):
l_group = list(group)
print(l_group)
my_user = User.query.filter_by(id=key).first()
setattr(my_user, "number_of_rooms", len(l_group))
db_session.commit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.