7

假设我定义了以下 SQLAlchemy 类:

Base = declarative_base()

class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    computers = relationship('Computer', backref=backref('owner', lazy='dynamic'))

class Computer(Base):
    __tablename__ = 'computer'
    id = Column(Integer, primary_key=True)
    ownerid = Column(Integer, ForeignKey('person.id'))

进一步假设我以这种方式访问​​了惰性查询对象:

relation = getattr(Computer, 'owner')

我如何确定是否relation引用单个实例Person(即在多对一关系中,如本例中),或者是否relation引用实例集合(如在一对多关系中)?换句话说,如何确定动态 SQLAlchemy 关系对象的关系类型?

4

1 回答 1

3

如果我们假设model = Computerrelation = 'owner'问题一样,那么以下属性是True当且仅当关系是实例列表而不是单个实例:

model._sa_class_manager[relation].property.uselist

然后,您可以使用它来测试是否one()在结果上调用该方法getattr(model, relation)

if model._sa_class_manager[relation].property.uselist:
    related_instances = getattr(model, relation)
else:
    related_instance = getattr(model, relation).one()

但是,我不相信这是最好的解决方案。

于 2012-12-03T21:01:00.883 回答