【问题标题】:unexpected SQLAlchemy object state after session.deletesession.delete 后意外的 SQLAlchemy 对象状态
【发布时间】:2021-05-16 17:44:09
【问题描述】:

假设我们有一个 SQLAlchemy ORM 类 User 和一个 User 对象:

ed_user = User(name='ed', nickname='eddie')

我们可以找到对象的状态

state_of_ed_user = sqlalchemy.inspect(ed_user)

状态按预期从瞬态开始

assert state_of_ed_user.transient == True

然后在 session.commit() 之后变成持久化

session.commit()
assert state_of_ed_user.persistent == True

但是,在 session.delete() 之后,我预计对象的状态会更新为已删除 (https://docs.sqlalchemy.org/en/13/orm/internals.html#sqlalchemy.orm.state.InstanceState.deleted),但是它没有更新。

session.delete(ed_user)
assert state_of_ed_user.deleted == False
assert state_of_ed_user.persistent == True

我对 session.delete 的理解有误吗? 我正在使用 SQLAlchemy 1.3.23。

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    有关会话状态的更多背景信息,请参阅 Quickie Intro to Object States

    这里指出,当一个对象在刷新中被删除时,它会获得deleted 状态。

    运行session.flush()(通常是session.commit() 的一部分)以查看对象的deleted 状态。

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 2012-02-13
      • 1970-01-01
      • 2014-06-12
      • 2014-08-30
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多