首页 文章

Flask Sqlalchemy ORM如何添加属性以返回子项的数量

提问于
浏览
1

这让我疯狂,我相信它比我做得更直接 . 但到目前为止,搜索和尝试各种组合的结束并没有让我无处可去 .

我正在使用Flask和SQLAlchemy而且我对两者都是新手..所以,如果我有两个类/表定义像这样

class Child(db.Modal):
    __tablename__ = 'children'
    id = db.Column(db.Integer, primary_key=True)
    kidsname = db.Column(db.String(20))
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'), nullable=False)

class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    children = db.relationship('Child', backref='parent', lazy=True)

我想要的是能够向父类添加属性以返回子项数,例如

def child_count(self):
    return ????

当父实例传递给我的html模板时,我希望能够做这样的事情 .

<p>Parent: {{ parent.name }}  # of children: {{parent.child_count}}</p>

任何帮助或指针在正确的方向将不胜感激..

1 回答

  • 0

    你可以使用 column_property https://docs.sqlalchemy.org/en/latest/orm/mapped_sql_expr.html

    from sqlalchemy.orm import column_property
    from sqlalchemy import select, func
    
    
    class Parent(db.Model):
        __tablename__ = 'parent'
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(20))
        children = db.relationship('Child', backref='parent', lazy=True)
        child_count = column_property(select([func.count(children.id)]).\
            where(children.parent_id==id))
    

    此外,您可以在此问题中使用hybrid_property找到问题的解决方案SQLAlchemy - Writing a hybrid method for child count

相关问题