0

テーブルUserとCarの間に多対多の関係があるとしましょう。

使用すると正常に動作します

User.query.filter_by(name='somename').all().cars

Car.query.filter_by(vin='xxxxxx').all().users

BaseQueryをxmlオブジェクトに変換する関数を作成したので、からBaseQueryを抽出する必要がありますCar.query.filter_by(vin='xxxxxx').all().users

それを行う方法はありますか?

4

1 に答える 1

4

Query.all()正直なところ、リストを返すため、提供されたコードサンプルが実際にどのように機能するかわかりません。[].usersエラーが発生するはずです。

いずれにせよ、以下にいくつかのオプションを示します。

# 1: this should be fine
qry1 = Car.query.join(User, Car.users).filter(User.name=='you')

# 1: this will probably not work for you, as this is not one query, although the result is a Query instance
usr1 = User.query.filter_by(name='you').one()
qry2 = Car.query.with_parent(usr1)

# 3: you might define the relationship to be lazy='dynamic', in which case the query object instance will be returned
from sqlalchemy.orm.query import Query
class Car(Base):
    __tablename__ = 'cars'
    id = Column(Integer, primary_key=True)
    vin = Column(String(50), unique=True, nullable=False)

    users = relationship(User, secondary=user_cars, 
            #backref='cars',
            backref=backref('cars', lazy="dynamic"),
            lazy="dynamic",
            )
qry3 = Car.query.filter_by(name="you").one().cars
assert isinstance(qry3, Query)

オプション 3 の詳細については、こちらを参照してください: orm.relationship(...)

于 2012-08-07T11:08:47.920 に答える