在我的瓶的應用程序,有許多到許多文件和標記之間的關係:的SQLAlchemy:在許多一對多的關係查詢過濾計數
DocTokens = db.Table(
'DocTokens',
db.Column('token_id', db.Integer, db.ForeignKey('Token.id')),
db.Column('document_id', db.Integer, db.ForeignKey('Document.id')),
)
class Token(db.Model):
__tablename__ = 'Token'
id = db.Column(db.Integer, primary_key=True)
...
is_gold = db.Column(db.Boolean, default=None)
class Document(db.Model):
__tablename__ = 'Document'
id = db.Column(db.Integer, primary_key=True)
...
tokens = db.relationship(
'Token',
secondary=DocTokens,
backred=db.backref('documents', lazy='dynamic'),
)
我想構建一個文檔查詢,按相關令牌的數量排序(遞減),其中Token.is_gold爲無。
到目前爲止,我已經想通了如何通過相關的令牌數量合同文檔:
db.session.query(
Document,
func.count(DocTokens.c.token_id).label('total')
).join(DocTokens).group_by(Document).order_by('total DESC')
但是,我似乎無法使該計數僅包括令牌,其中Token.is_gold是無。這是多次失敗的嘗試之一:
db.session.query(
Document,
func.count(DocTokens.c.token_id)
.filter(Token.is_gold.is_(None)).label('total')
).join(DocTokens).group_by(Document).order_by('total DESC')
它扔了以下錯誤:
AttributeError: Neither 'count' object nor 'Comparator' object has an attribute 'filter'
下面是一些StackOverflow的解決方案,我一直在努力,模型包含子和混合性(包括解決方案。 ):
- How to order by count of many-to-many relationship in SQLAlchemy?
- Sort by Count of Many to Many Relationship - SQLAlchemy
- SQLAlchemy ordering by count on a many to many relationship
- order by a method contained within a class in SQLAlchemy
我是相當新的SQL/SQLAlchemy的...任何幫助是非常感謝!
你能表達你的查詢在純sql嗎? –
感謝您在回覆您的評論之前回答此問題。我嘗試了幾個小時來制定SQL,但我無法得到它的工作......非常感謝! – NTS