计算多对多关系中的行数(SQLAlchemy)
问题内容:
我说博客条目和标签之间存在多对多关系。现在,我想知道一个特定标签有多少个条目。
想象以下模型(简化):
rel_entries_tags = Table('rel_entries_tags', Base.metadata,
Column('entry_id', Integer, ForeignKey('entries.id')),
Column('tag_id', Integer, ForeignKey('tags.id'))
)
class Entry(Base):
__tablename__ = 'entries'
id = Column(Integer, primary_key=True)
title = Column(String(80))
text = Column(Text)
tags = relationship('Tag', secondary=rel_entries_tags, backref=backref('entries'))
def __init__(self, title, text):
self.title = title
self.text = text
self.tags = tags
class Tag(Base):
__tablename__ = 'tags'
id = Column(Integer, primary_key=True)
name = Column(String(80), unique=True, nullable=False)
def __init__(self, name):
self.name = name
我计算标签条目数量的方法是len(db_session.query(Tag).get(1).entries)
。问题是,当db_session.query(Tag).get(1).entries
SQLAlchemy获取标签时,会选择所有条目及其所有列作为标签,但是,我只需要条目的数量,而不是条目本身。有没有针对该问题的最佳方法?
谢谢。
问题答案:
session.query(Entry).join(Entry.tags).filter(Tag.id==1).count()
或者如果您已经有标签
session.query(Entry).with_parent(mytag, "entries").count()