Flask Sqlalchemy ORM如何添加属性以返回子级计数



这让我抓狂,我相信它比我做的更直接。但到目前为止,搜索和尝试各种组合都没能让我取得任何进展。

我正在使用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 ????

当parent的实例被传递到我的html模板时,我希望能够做这样的事情。。

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

如有任何帮助或指示,我们将不胜感激。。

您可以使用column_propertyhttps://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))

此外,您可以在这个问题中找到一个解决您的混合属性问题的方法SQLAlchemy-为子计数编写一个混合方法

最新更新