我在两种类型的对象 Message 和 URL 之间有一对多的关系。在类 URL 中定义了一个关系,其中一个名为“link”的反向引用指向 Message。有没有办法在查询消息时进行过滤,以查找例如拥有少于 n 个 URL 的消息?
我试过:
session.query(Message).filter(len(Message.link) < n).all()
与
from sqlalchemy import func
session.query(Message).filter(func.count(Message.link) < n).all()
他们每个人都给我发回一个错误。第一个:
InstrumentedAttribute has no len()
第二:
DatabaseError: (DatabaseError) ORA-00934: group function is not allowed here
感谢Audrius Kažukauskas,经过一番摆弄,我设法完成了以下查询:
session.query(Message.message_id)\
.join(URL)
.group_by(Message.message_id)
.having(func.count(URL.url_id) <= n)
哪个工作正常(发回 KeyedTuple 而不是 Message 集合,但我可以忍受)。