python – Flask-SQLAlchemy查询多对多

我在类别和产品之间有多对多的关系,如下所示:

category_product = db.Table('category_product',db.Column('category_id',db.Integer,db.ForeignKey('category.id')),db.Column('product_id',db.ForeignKey('product.id')))


class Product(db.Model):
    """ sqlAlchemy Product Model """
    id = db.Column(db.Integer,primary_key=True)
    sku = db.Column(db.String(10),unique=True,nullable=False)
    name = db.Column(db.String(80),nullable=False)
    categories = db.relationship('Category',secondary=category_product,backref=db.backref('categories',lazy='dynamic'))

    def __init__(self,name):
        self.name = name

    def __repr__(self):
        return 'sqlAlchemy Category Model """
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(80),nullable=False)
    products = db.relationship('Product',backref=db.backref('products',name):
        self.name = name

    def __repr__(self):
        return '

我试图获取由category_id指定的给定类别中的所有Product对象:

products = db.session.query(Category).\
        filter_by(id=category_id).\
        products.\
        all()

但是,我得到以下异常:

AttributeError: 'Query' object has no attribute 'products'

我可能错过了一些简单的东西.

最佳答案
您不能使用属性名称“products”跟随filter_by.首先需要使用all()或first()来捕获结果.此外,由于您使用的是Flask-sqlAlchemy,我建议不要使用db.session.query(Category)而是使用Category.query.所以改变这个

products = db.session.query(Category).\
    filter_by(id=category_id).\
    products.\
    all()

all_products = Category.query.\
    filter_by(id=category_id).\
    first().\
    products

相关文章

我最近重新拾起了计算机视觉,借助Python的opencv还有face_r...
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Poolin...
记得大一学Python的时候,有一个题目是判断一个数是否是复数...
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic ...
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic v...
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic ...