Zoz*_*ozz 4 python session sqlalchemy
我需要将一个对象附加到会话,使其与db中持久化的对象不同.(更容易用代码解释):
session.query(type(some_object)).filter_by(id=some_object.id).one()
Run Code Online (Sandbox Code Playgroud)
有更合适的方法吗?
session.add(some_object)不起作用,因为具有此类ID的实体已经可以附加到此会话,并且object = session.merge(some_object)对我不起作用,因为它从分离的副本转换状态(如果我使object.name ='asdfasdf'这些更改将在合并后挂起宾语)
编辑:
我找到了一点不那么丑陋的方式:
some_object = session.merge(some_object)
session.refresh(some_object)
Run Code Online (Sandbox Code Playgroud)
但是在一次通话中有没有办法解决这个问题?
我需要将一个对象附加到会话,使其与db中持久化的对象不同.
"与DB没有区别"几乎意味着你要加载它,所以查询它.您可能希望考虑该对象可能已存在于该目标会话中.所以你的查询方法(类型(对象))可能是最直接的,虽然你可以使用get()直接命中主键,populate_existing()可以保证会话中已经存在的状态被覆盖:
session.query(type(some_object)).populate_existing().get(some_object.id)
Run Code Online (Sandbox Code Playgroud)
上面调用几乎相同的代码路径refresh().您也可以使用合并/刷新方法,但至少会发出两次SELECT调用.
| 归档时间: |
|
| 查看次数: |
2225 次 |
| 最近记录: |