【发布时间】:2015-04-13 21:49:15
【问题描述】:
假设我有一个博客系统的简单模型:
class Blog(db.Model):
__tablename__ = 'blog'
id = db.Column(db.BigInteger, primary_key=True)
posts = db.relationship('Post', backref='blog', lazy='dynamic')
class Post(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String())
我使用的是 Flask-SQLAlchemy,所以语法可能看起来有点不同,但映射非常简单。
是否可以在帖子计数旁边获取所有博客?因为现在迭代一个列表会在每次迭代时执行一个额外的查询,并且这并不能真正扩展。在 SQL 中非常简单:
SELECT b.*, COUNT(p)
FROM blog b
JOIN post p ON(b.id = p.blog_id)
GROUP BY b.id;
但是在 SQLAlchemy 中它是如何完成的呢?我最好有两个选择:
- 在查询时指定
- 在模型本身中创建一个“虚拟”属性以始终使用它(例如,Hibernate 将其称为 formulas)
我认为我缺少正确的术语,因为我在 Google 上找不到任何东西。
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy