Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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 sqlalchemy值变化不';不承诺_Python_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python sqlalchemy值变化不';不承诺

Python sqlalchemy值变化不';不承诺,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我有以下代码来更新Postgres数据库中的一些条目: engine = create_engine(Config.SQLALCHEMY_DATABASE_URI) # Create session Session = sessionmaker() Session.configure(bind=engine) s = Session() ids_to_update = [185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 196, 197]

我有以下代码来更新Postgres数据库中的一些条目:

engine = create_engine(Config.SQLALCHEMY_DATABASE_URI)

# Create session
Session = sessionmaker()
Session.configure(bind=engine)
s = Session()

ids_to_update = [185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 196, 197]

for user in models.Users.query.all():
    if user.id in ids_to_update:
        user.group = 'design_team'

s.commit()
但是在我运行这个语句之后,数据库中什么也没有发生? 我也没有从Postgres中得到任何错误?

您已将其标记为,因此可以肯定地说,
models.Users.query
使用默认的
db.session
获取这些实体。然后,您尝试在另一个会话中提交,但您执行的所有更改实际上都由
db.session
保存。因此,解决方法很简单:从您拥有的位置导入
db
,而不是
s.commit()

但是:这样一个简单的操作可以作为批量更新来执行,首先:

models.Users.query.\
    filter(models.Users.id.in_(ids_to_update)).\
    update({models.Users.group: 'design_team'},
           synchronize_session=False)
# Use the correct session
db.session.commit()

为了在请求之外使用
db
,您可能需要一个

如果您有一个值列表,为什么不将
update
与sqlalchemy?相关的函数中的
一起使用呢。只需添加您自己的答案。对未来的游客来说,任何额外的东西都可能被视为噪音。请参阅:。我需要运行
db.create_all()
,以便在Ilja Everilä的答案生效之前获得正确的会话,我花了一段时间才得出这个答案,因此我认为发布整个最终功能块可能会有用
models.Users.query.\
    filter(models.Users.id.in_(ids_to_update)).\
    update({models.Users.group: 'design_team'},
           synchronize_session=False)
# Use the correct session
db.session.commit()