Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python更新数据库列时出现覆盖问题?_Python_Database - Fatal编程技术网

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语句来解释