gpt4 book ai didi

python - 刷新sqlalchemy中的分离实体

转载 作者:太空狗 更新时间:2023-10-30 02:48:36 25 4
gpt4 key购买 nike

我需要将一个对象附加到 session ,这样它就不会与数据库中持久化的对象不同。 (用代码更容易解​​释):

session.query(type(some_object)).filter_by(id=some_object.id).one()

有没有更合适的方法来做到这一点?session.add(some_object) 不起作用,因为具有此类 id 的实体已经可以附加到此 session ,而 object = session.merge(some_object) 不起作用为我工作,因为它从分离的副本转换状态(如果我使 object.name='asdfasdf' 这些更改将在合并对象后挂起)

编辑:

我发现了一个不那么丑陋的方法:

some_object = session.merge(some_object)
session.refresh(some_object)

但是有没有一种方法可以在一次调用中做到这一点?

最佳答案

I need to attach an object to session in such a way that it will not differ from one persisted in db.

“不会与 DB 不同”几乎意味着您要加载它,所以查询它。您可能需要考虑该对象可能已经存在于该目标 session 中。所以你使用 query(type(object)) 的方法可能是最直接的,尽管你可以使用 get() 直接点击主键,并使用 populate_existing() 来保证 session 中已经存在的状态被覆盖:

session.query(type(some_object)).populate_existing().get(some_object.id)

上面的代码调用了与 refresh() 几乎相同的代码路径。您使用的合并/刷新方法也有效,但至少会发出两个 SELECT 调用。

关于python - 刷新sqlalchemy中的分离实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com