检查SqlAlchemy会话中是否存在主键

时间:2015-05-27 08:03:20

标签: sqlalchemy

我希望能够检查Count对象中是否存在具有给定主键的对象。

这类似于0函数,其操作类似于:

Session

我只想在会话中获取对象而不发出任何SQL。

(原因是我的应用程序,我知道如果对象不在会话中,它就不会在数据库中)

2 个答案:

答案 0 :(得分:1)

这可以通过使用-The Query Object

来完成

使用query()方法根据给定的Session生成查询:

q = session.query(SomeMappedClass)

以下是Query对象的完整界面。

class sqlalchemy.orm.query.Query(entities,session = None) ORM级SQL构造对象。

查询是ORM生成的所有SELECT语句的来源,包括最终用户查询操作以及高级内部操作(如相关集合加载)。它具有生成接口,连续调用返回一个新的Query对象,前者的副本以及与之相关的附加标准和选项。

查询对象通常最初使用Session的query()方法生成。

答案 1 :(得分:1)

您可以通过在会话的identity_map中进行查找来检查具有给定主键的对象是否在会话中。

身份映射的键是“身份密钥”元组,您可以使用sqlalchemy.orm.util.identity_key函数生成该元组。

例如,给定具有主键MyClass的映射类id,以检查会话中ID为99的对象:

from sqlalchemy.orm.util import identity_key
my_key = identity_key(MyClass, 99)
# will return the instance of MyClass in the session, or None
my_class_instance = my_session.identity_map.get(my_key)

来源:https://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.identity_map