[英]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.