Blog girişleri ve etiketleri arasında çoktan çoğa ilişkisi var. Şimdi belirli bir etiketin kaç tane girdi içerdiğini bilmek istiyorum. Çoktan çoğa ilişkideki satır sayısı (SQLAlchemy)
(basitleştirilmiş) Aşağıdaki modeller düşünün: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
Benim yaklaşım bir etiket için girişlerin miktarını saymak len(db_session.query(Tag).get(1).entries)
olduğunu. Sorun şu ki, db_session.query(Tag).get(1).entries
SQLAlchemy bir etiket için tüm sütunları ile tüm girdileri seçer, ancak girdilerin kendileri değil, yalnızca girişlerin miktarını istiyorum. Bu problem için daha optimal bir yaklaşım var mı?
Teşekkürler.
+1 varsa: ve sık sık bu gerekiyorsa, bir özelliği oluşturabilirsiniz: '@ özelliği \ n def entries_cnt (self): \ n return Session.object_session (self) .query (Giriş) .with_parent (kendiliğinden "girdiler") count() ' – van
Bu yanıt için teşekkürler. Ancak, üretilen SQL deyimi 'SELECT count (*) AS say_1 FROM (SELECT order_line.id AS order_line_id, order_line.order_id AS order_line_order_id FROM order_line NEREDE% (param_1) s = order_line.order_id) AS anon_1' - yerine bir SELECT sayımı (*) order_line WHERE order_line.order_id =% (param_1) s' iç bir SELECT elde ederiz. Benim durumumda, bire çok değil (Siparişte birçok OrderLine var). – guyarad
bir sorguyu (func.count ('*')) önde yapar. [count() belgeler] (http://docs.sqlalchemy.org/en/latest/orm/query.html?highlight=query.count#sqlalchemy.orm.query.Query.count) buna işaret eder. – zzzeek