Python更新数据库列时出现覆盖问题?
我有一个简单的函数,可以为某些用户更新特定列:Python更新数据库列时出现覆盖问题?,python,database,Python,Database,我有一个简单的函数,可以为某些用户更新特定列: 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)包含
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\u列的值
问题是它将用户的所有值设置为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()
房间数量的值发生变化:
编辑+解决方案+仍然困惑
我设法解决了这个问题,但我不会回答这个问题,因为我不明白为什么它解决了这个问题,我也从来没有遇到过类似的事情,只是简单地更改了打印位置和更改数据的代码就解决了这个问题,但即使数据已正确更改,print
现在为0
我唯一的猜测是len(list(group))
在这个函数中只能使用一次,但为什么呢?或者这是一个线程问题,老实说,我很困惑。如果有人能解释这一点,我会很高兴
以下是修复此问题的代码:
for key, group in groupby(list_i):
my_user = User.query.filter_by(id=key).first()
setattr(my_user, "number_of_rooms", len(list(group)))
print key, type(key), len(list(group)), type(len(list(group)))
db_session.commit()
以及setattr
之后的打印:
尝试将len(list(group))
保存到setattr
之前的任何变量,并使用此变量,而不是函数。它仍然是@RomanMindlinOk,尝试打开echo并检查SQL语句sentI设法解决它检查我的上次更新,也许你可以解释@RomanMindlinSorry,但我必须查看SQL语句来解释