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(つまり、この例のように多対 1 の関係) をrelation参照するか、インスタンスのコレクション ( 1 対多の関係など) を参照するかを判断するにはどうすればよいですか? 言い換えれば、動的な 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 に答える