我有以下代码来更新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那里得到任何错误?
答案 0 :(得分:0)
您已将此标记为flask-sqlalchemy,因此可以安全地说models.Users.query
正在使用默认scoped session db.session
来获取这些实体。然后,您尝试在另一个会话中提交,但您执行的所有更改实际上都由db.session
保留。因此修复很简单:从您拥有它的位置导入db
而不是s.commit()
:
db.session.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
,您可能需要suitable context。