Python 什么';SQLAlchemy中分离对象和过期对象之间的区别是什么?

Python 什么';SQLAlchemy中分离对象和过期对象之间的区别是什么?,python,session,sqlalchemy,Python,Session,Sqlalchemy,我不确定我是否理解SQLAlchemy的会话如何在其生命周期中跟踪对象。我想我被可能的误报搞糊涂了 有人能解释一下,如果我在提交时将作用域会话设置为默认值True,并且该会话已过期,那么会发生什么情况吗 box = session.query(User).filter(Box.box_id==3, Box.color==u'red').one() box.color = u'blue' session.commit() # 1 box.color = u'yellow' session.c

我不确定我是否理解SQLAlchemy的会话如何在其生命周期中跟踪对象。我想我被可能的误报搞糊涂了

有人能解释一下,如果我在提交时将作用域会话设置为默认值
True
,并且该会话已过期,那么会发生什么情况吗

box = session.query(User).filter(Box.box_id==3, Box.color==u'red').one()
box.color = u'blue'

session.commit() # 1

box.color = u'yellow'

session.commit() # 2
第一次提交(#1)后,
session
是否仍在跟踪
box
box
现在过期了吗?它是分离的吗


如果是这样,为什么第二次提交仍然会将我的更改推送到db?为什么它能成功地执行400多次,然后跳过一个节拍(通过无声地不推它们)。

分离的实例没有添加到会话中,也没有从会话中删除。它们不会被
commit
持久化,并且可能无法加载延迟、过期或相关字段

过期实例是会话的一部分,但已标记为需要刷新其字段和关系。对属性的访问将执行另一个查询以获取最新的值。更改将在提交时保持