假设我定义了以下 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 关系对象的关系类型?
最佳答案
如果我们假设 model = Computer
和 relation = 'owner'
在问题中,那么当且仅当以下属性为 True
如果关系是实例列表而不是单个实例:
model._sa_class_manager[relation].property.uselist
然后您可以使用它来测试是否对 getattr(model, relation)
的结果调用 one()
方法:
if model._sa_class_manager[relation].property.uselist:
related_instances = getattr(model, relation)
else:
related_instance = getattr(model, relation).one()
但是,我不确定这是最好的解决方案。
关于python - 如何确定动态 SQLAlchemy 关系的类型(例如多对一)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11877899/