我有4个表,Vendor
,Products
和ProductGroupings
以及一个名为Products_ProductGroupings
的联接表。我正在尝试查询所有ProductGroupings
加入Products
加注Products_ProductGroupings
Products.vendor == <A Vendor Instance>
。
我不能做的是找到与连接表一起使用的正确语法。
或者,由于ProductGroupings
有一个名为products
的媒体资源,因此我想查询ProductGroupings
products
vendor
<A Vendor Instance>
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])
的所有anchorPane
。
15px
答案 0 :(得分:1)
您可以简单地加入ORM关系:
db.session.query(ProductGroupings).\
join(ProductGroupings.products).\
filter(Products.vendor == v)
或者Query.join()
接受一个连接点作为第二个参数:
db.session.query(ProductGroupings).\
join(Products, ProductGroupings.products).\
filter(Products.vendor == v)
请注意,多对多关系最终可能会为单个ProductGroupings
实体生成多行,但在查询单个实体时这不可见。你也可以filter on EXISTS:
db.session.query(ProductGroupings).\
filter(ProductGroupings.products.any(Products.vendor == v))