2017-10-25 5 views
0

나는 Vendor, ProductsProductGroupings의 테이블과 Products_ProductGroupings이라는 조인 테이블을 가지고 있습니다. 모든 ProductGroupingsProducts과 (과) Products_ProductGroupingsProducts.vendor == <A Vendor Instance>의 합류를 쿼리하려고합니다.조인 테이블을 사용하여 조인을 수행하는 방법은 무엇입니까?

내가 할 수없는 것은 조인 테이블에 사용할 올바른 구문을 찾는 것입니다. ProductGroupings 이후 또는

는, 그 모든 ProductGroupingsproductsvendor<A Vendor Instance>이 내가 질의하고 싶습니다 products라는 속성이 있습니다.

class Products(db.Model): 
    __tablename__ = 'products' 

    id = db.Column(db.Integer, primary_key=True) 
    parent_id = db.Column(db.Integer, db.ForeignKey('products.id')) 
    parent = db.relationship('Products', backref='children', remote_side=[id]) 
    groupings = db.relationship('ProductGroupings', secondary=Products_ProductGroupings, backref='products') 


class ProductGroupings(db.Model): 
    __tablename__ = 'product_groupings' 

    id = db.Column(db.Integer, primary_key=True) 
    date_created = db.Column(db.DateTime(timezone=True), nullable=False, default=datetime.datetime.now) 


Products_ProductGroupings = db.Table(
    'products_product_groupings', 
    db.Column('product_id', db.Integer, db.ForeignKey('products.id')), 
    db.Column('product_grouping_id', db.Integer, db.ForeignKey('product_groupings.id')) 
) 

class Vendors(db.Model): 
    __tablename__ = 'vendors' 

    id = db.Column(db.Integer, primary_key=True) 
    hash = db.Column(db.Text(10), nullable=False, default=create_hash) 
    vendor_id = db.Column(db.Integer, db.ForeignKey(Vendors.id), nullable=False) 
    vendor = db.relationship(Vendors, backref='products', foreign_keys=[vendor_id]) 
+0

모델 게시 (관련 부분) 수 있습니다. –

+0

@ IljaEverilä 추가 된 모델. – ruipacheco

+0

제품 및 공급 업체 간의 관계/외래 키를 생략했다고 생각합니다. –

답변

1
당신은 단순히 ORM 관계에 따라 가입하실 수 있습니다

: 많은 관계로 많은 끝낼 수

db.session.query(ProductGroupings).\ 
    join(Products, ProductGroupings.products).\ 
    filter(Products.vendor == v) 

참고 :

db.session.query(ProductGroupings).\ 
    join(ProductGroupings.products).\ 
    filter(Products.vendor == v) 

는 또한 Query.join()는 두 번째 인수로 포인트를 가입 허용 단일 ProductGroupings 엔티티에 대해 여러 행을 생성하지만 단일 엔티티 만 쿼리 할 때는 표시되지 않습니다. filter on EXISTS :

db.session.query(ProductGroupings).\ 
    filter(ProductGroupings.products.any(Products.vendor == v)) 
관련 문제