发出session.commit()
后更新对象是否正常工作?或者我需要刷新对象吗?
我认为这对于这个问题已经足够了,但如果需要,我可以提供更多信息来清除我的问题。
编辑:
通过更新,我的意思是设置一些属性,即对象的列值。
答案 0 :(得分:7)
简答:不,你不需要手动刷新,sqlalchemy会为你做。
了解它何时发生是有用的,所以下面是简短的概述。
来自Session.commit()
的文档:
默认情况下,Session也会使所有数据库加载状态到期 事务提交后的ORM管理的属性。这样就可以了 后续操作从数据库加载最新数据。 可以使用expire_on_commit = False选项禁用此行为 到sessionmaker或Session构造函数。
基本上,如果你没有设置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
语句。