2013-10-17 127 views
4

我有很多一對多的類別和產品之間的關係如下:燒瓶SQLAlchemy的查詢多到很多

category_product = db.Table('category_product', 
          db.Column('category_id', 
             db.Integer, 
             db.ForeignKey('category.id')), 
          db.Column('product_id', 
             db.Integer, 
             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 '<Product {}>'.format(self.name) 


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

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

    def __repr__(self): 
     return '<Category {}>'.format(self.name) 

我試圖讓在一個給定的Category所有Product對象,指定通過category_id

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

不過,我得到以下異常:

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

我可能錯過了一些簡單的東西。

回答

4

您無法使用屬性名稱爲'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 
+0

我得到這個:'AttributeError的: '名單' 對象有沒有屬性「products'' –

+0

對不起糾正答案。只需使用第一個() – codegeek

+0

'首先()'做了詭計......謝謝! –