sqlalchemy值变化不提交

时间:2018-02-01 09:27:55

标签: 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]

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

s.commit()

但运行此语句后数据库中没有任何反应? 我也没有从Postgres那里得到任何错误?

1 个答案:

答案 0 :(得分:0)

您已将此标记为,因此可以安全地说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