2016-08-19 11 views
1

それぞれのカテゴリのアイテム数を数え、ジンジャーテンプレートで繰り返し処理できるコレクションを作成しようとしています。私の最終的な出力のようなものです:sqlalchemyモデルの関連アイテムをカウントする

カテゴリ1、5

カテゴリ2、10

カテゴリー3、0

ゼロのアイテムの場合は重要です。

私のモデルは次のとおりです。

class Category(Base): 

    __tablename__ = 'category' 

    id = Column(Integer, primary_key=True) 
    name = Column(String(80), unique=True) 
    user_id = Column(Integer, ForeignKey('user.id')) 
    user = relationship(User) 


class Item(Base): 

    __tablename__ = 'item' 

    id = Column(Integer, primary_key=True) 
    name = Column(String(80)) 
    description = Column(String(500)) 
    category_id = Column(Integer, ForeignKey('category.id')) 
    category = relationship(Category) 
    user_id = Column(Integer, ForeignKey('user.id')) 
    user = relationship(User) 
    date_added = Column(DateTime, default=datetime.datetime.now) 

私は親切に、クエリ、ほぼ正しい

count_categories = db_session.query(Category.name, func.count(Item.id)).join(Item.category).group_by(Category.id).all() 

に私を導いた、Stackoverflow: Counting relationships in SQLAlchemyの方向に指摘されてきたが、それはしていませんゼロの場合を処理します。カテゴリにアイテムがない場合は、依然としてクエリによって返されたカテゴリが必要です。

ご迷惑をおかけして申し訳ございません。

+0

可能な複製を参照してください(http://stackoverflow.com/questions/25500904/counting-relationships -in-sqlalchemy) –

答えて

0

実は、私はそれを考え出した:

count_categories = db_session.query(
     Category.name, func.count(Item.id)).outerjoin(
     Item).group_by(Category.id).all() 

は、[SQLAlchemyの中にカウント関係]のSQLAlchemy documentation on Joins

関連する問題