发行后更新对象是否session.commit()
可以正常工作?还是我需要刷新对象?
我认为这足以解决问题,但如有需要,我可能会提供更多信息来澄清我的问题。
编辑:
通过更新,我的意思是设置一些属性,即对象的列值。
简短的答案:不,您不需要手动刷新,sqlalchemy会为您完成。
知道何时发生是很有用的,因此下面是简短概述。来自以下文档Session.commit()
:
默认情况下,在事务提交后,会话还将使所有ORM管理的属性上的所有数据库加载状态失效。这样,后续操作即可从数据库中加载最新数据。可以使用sessionmaker或Session构造函数的expire_on_commit = False选项禁用此行为。
基本上,鉴于您未设置expire_on_commit=False
,一旦您尝试访问(读取,但未设置)其属性,该对象将自动刷新session.commit()
。
my_obj = session.query(MyType).get(1)
my_obj.field1 = 'value1'
session.commit() # will commit and expire my_obj
my_obj.field1 = 'new value' # object is still the same, but field is updated
print my_obje.field1 # at this point SA will first refresh the object from the database; and make sure that new values for changed fields are applied
实际上,如果启用日志记录,则将在访问(读取)持久性实例的属性后立即sqlalchemy
发出新的SELECT
语句。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句