簡體   English   中英

Python 更新數據庫列有覆蓋問題嗎?

[英]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 Mindlinglibdud所指定的, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM