タグ付けをサポートするシンプルなブログを開発しています。実際、タグ クラウド機能を追加したいと考えており、ブログで使用されている各タグの数を取得する必要があります。私のブログとタグのモデルは次のようになります。
class Blog(db.Model, ObservableModel):
__tablename__ = "blogs"
id = db.Column(db.Integer, db.Sequence('blog_id_seq'), primary_key=True)
title = db.Column(db.String(200), unique=True, nullable=True)
tags = relationship('Tag', secondary=tags_to_blogs_association_table)
class Post(db.Model, ObservableModel):
__tablename__ = "posts"
......................
blog = relationship('Blog', backref = db.backref('blogs', lazy='dynamic'))
tags = relationship('Tag', secondary=tags_to_posts_association_table)
class Tag(db.Model):
__tablename__ = "tags"
id = db.Column(db.Integer, db.Sequence('post_id_seq'), primary_key=True)
title = db.Column(db.String(30), unique=False, nullable=True)
のようなペアの辞書を収集したいのですが、タグ項目を含む投稿を取得tag_name : count
してコレクションを反復処理する方法は 1 つだけです。Blog.tags
実際、それが (パフォーマンスの観点から) 最善の解決策であるかどうかはわかりません。おそらく、flask-sqlalchemy は結合機能を提供していますか? 質問: 次のような Flask-SQLAlchemy クエリを使用して Python で実装する方法:
select
t.id,
t.title,
count(post_id)
from tags t
join tags_to_blogs b on t.id=b.tag_id
join tags_to_posts p on t.id=p.tag_id
group by (t.id)
having b.blog_id=1