Python sqlalchemy值变化不';不承诺
我有以下代码来更新Postgres数据库中的一些条目: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]
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()