簡體   English   中英

Flask SQLAlchemy-多對多關系-子級過濾

[英]Flask sqlalchemy - many to many relationship - filtering on children level

我對孩子的過濾器不起作用。 我不確定這是以錯誤的方式完成的。

country.py

product_country = Table('product_country', Base.metadata,
  Column('product_id', Integer, ForeignKey('product.id'), primary_key=True),
  Column('country_id', Integer, ForeignKey('country.id'), primary_key=True)
)

class Country(Base):
  __tablename__="country"
  id = Column(Integer, primary_key=True)
  name = Column(String(200))
  products = relationship(Product, secondary=product_country, backref='countries')

product.py

class Product(Base):
  __tablename__="product"
  id = Column(Integer, primary_key=True)
  color = Column(Integer)
  ....

然后sqlalchemy搜索:

country = s.query(Country).join(Country.products).filter(Country.id==1).filter(Product.color==1).first()

好吧,我得到了id = 1的國家/地區,但我想要的是什么,但是在country.products列表中,我期望只有color = 1的產品,但是所有產品都分配給了country。 請你幫我一下。 謝謝

那是個誤會。 有充分的理由,關系加載與查詢是分開的。 換句話說,您使用過的聯接並不急於加載關系。 您可以指示查詢它包含一個contains_eager()的預先加載的連接,並閱讀為了加入一個實例的禪宗加載”以理解,並閱讀“使用contains_eager()加載自定義過濾的收集結果”作為示例。做你想做的。 在您的情況下,只需添加

options(contains_eager(Country.products))

您的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM