发布后更新对象是否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
Run Code Online (Sandbox Code Playgroud)
实际上,如果启用日志记录,您将看到一旦访问(读取)持久实例的属性就会sqlalchemy发出新SELECT语句.
| 归档时间: |
|
| 查看次数: |
6677 次 |
| 最近记录: |