python - 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 ????
当父实例传递给我的html模板时,我希望能够做这样的事情。
<p>Parent: {{ parent.name }} # of children: {{parent.child_count}}</p>
任何正确方向的帮助或指示将不胜感激。
解决方案
您可以使用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))
此外,您可以在此问题SQLAlchemy - Writing a hybrid method for child count中找到有关 hybrid_property 问题的解决方案
推荐阅读
- postgresql - Postgres 将列出我的数据库,但当我尝试连接它时它不存在
- html - 为 a 设置垂直对齐
- swift - 如何在 Swift 中使用调用者的类型推断静态泛型方法中的类型
- javascript - Dialogflow - Hangouts Chat 负载示例
- laravel - Laravel 宅基地忽略要安装的功能
- python - 如何使用 Python 在 txt 文件中设置支出和描述?
- django - 当我定义 AUTH_USER_MODEL 时,Django 无法识别关系
- sql - 根据条件更新表
- ckeditor - 如何在自定义 ckeditor5 小部件中制作上下文菜单?
- vue.js - 如何使用 v-for 切换(隐藏/取消隐藏)动态添加的组件的子元素