检查对象是否为sqlalchemy模型实例

检查对象是否为sqlalchemy模型实例,sqlalchemy,Sqlalchemy,我想知道,给定一个对象,如何知道它是否是sqlalchemy映射模型的实例 通常,我会使用isinstance(obj,DeclarativeBase)。但是,在这个场景中,我没有可用的DeclarativeBase类(因为它在依赖项项目中) 我想知道这种情况下的最佳做法是什么 class Person(DeclarativeBase): __tablename__ = "Persons" p = Person() print isinstance(p, DeclarativeB

我想知道,给定一个对象,如何知道它是否是sqlalchemy映射模型的实例

通常,我会使用isinstance(obj,DeclarativeBase)。但是,在这个场景中,我没有可用的DeclarativeBase类(因为它在依赖项项目中)

我想知道这种情况下的最佳做法是什么

class Person(DeclarativeBase):
      __tablename__ = "Persons"

p = Person()

print isinstance(p, DeclarativeBase)
#prints True

#However in my scenario, I do not have the DeclarativeBase available
#since the DeclarativeBase will be constructed in the depending web app
#while my code will act as a library that will be imported into the web app
#what are my alternatives?
您可以使用并捕获异常。
或者您可以使用
\u is\u mapped\u class
,但理想情况下不应该使用,因为它不是公共方法

from sqlalchemy.orm.util import class_mapper
def _is_sa_mapped(cls):
    try:
        class_mapper(cls)
        return True
    except:
        return False
print _is_sa_mapped(MyClass)

# @note: use this at your own risk as might be removed/renamed in the future
from sqlalchemy.orm.util import _is_mapped_class
print bool(_is_mapped_class(MyClass))

例如,存在
对象映射器()
,因此:

from sqlalchemy.orm.base import object_mapper

def is_mapped(obj):
    try:
        object_mapper(obj)
    except UnmappedInstanceError:
        return False
    return True
完整的映射器实用程序记录在此处:


需要考虑的是:既然SQLAlchemy会引发特定的错误(
unappedClassError
用于calss,而
unappedInstanceError
用于实例),为什么不捕获它们而不是一般的异常?;)

谢谢你,范。我最初的问题是关于对象实例,而不是类。我是否将您的代码改为对象映射器?您始终可以获取实例的类<代码>类型(实例)当然,您可以使用对象映射器。或者如上所述,只需获取类型。由你决定。。。