我開發簡單的博客與標記支持。其實我想添加標籤雲功能,我需要計算每個標籤在博客中使用。 我的博客和標籤模型的樣子:瓶頸如何計算標籤計數
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
對詞典,只有一個辦法是遍歷集合Blog.tags
與檢索其中包含的標籤項職位。 其實我不確定它是最好的(從性能角度來看)的解決方案,也許flask-sqlalchemy提供了連接功能? 問:如何使用Python燒瓶SQLAlchemy的查詢關鍵詞,比如執行以下操作:
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
'query.join(Post.tags)'應該可以工作。我還建議不要採用第一種方式(隱式加入),顯式聯接的確看起來更清晰。 –
@AudriusKažukauskas這就是我的想法,'query.join(Post)'應該可以工作IIRC,但它只是引發了一個異常,說它找不到外鍵將'posts'鏈接到'tags'。我的猜測是關係有問題,或者只有'query.join(Post.tags)'有效。我會試試看,究竟是什麼錯... – jadkik94
我認爲'query.join(Post)'不起作用,因爲這是一個涉及到關聯表的多對多關係。 –