【问题标题】:sqlalchemy value change doesn't commitsqlalchemy 值更改未提交
【发布时间】:2018-02-01 09:27:54
【问题描述】:

我有以下代码来更新 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 收到任何错误?

【问题讨论】:

标签: python sqlalchemy flask-sqlalchemy


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 2021-12-26
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多