计算sqlalchemy模型中的相关项目

时间:2016-08-19 13:14:26

标签: sqlalchemy flask-sqlalchemy

我正在尝试计算各自类别中的项目数,最后得到一个我可以在jinja模板中迭代的集合。我的最终输出是这样的:

category1,5

category2,10

category3,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)

我一直指向Stackoverflow: Counting relationships in SQLAlchemy的方向,这引导我进行查询

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

这几乎是正确的,但它不处理零情况。当一个类别的项目为零时,我仍然需要查询返回的类别。

任何帮助,非常感谢。

1 个答案:

答案 0 :(得分:1)

实际上,我已经弄清楚了:

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

请参阅SQLAlchemy documentation on Joins