Das ist mein SQLAlchemy AbfragecodeWie begrenzt man N Ergebnisse pro `group_by` in SQLAlchemy/Postgres?
medium_contact_id_subq = (g.session.query(distinct(func.unnest(FUContact.medium_contact_id_lis))).filter(FUContact._id.in_(contact_id_lis))).subquery()
q = (g.session.query(FUMessage).
filter(FUMessage.fu_medium_contact_id.in_(medium_contact_id_subq))
.order_by(desc(FUMessage.timestamp_utc))
)
I FUMessage
von medium_contact_id
mit N Ergebnisse gruppiert begrenzen möchten.
Als Abhilfe können, das ist meine aktuelle hässlich und nicht optimierten Code:
medium_contact_id_lis = (g.session.query(distinct(func.unnest(FUContact.medium_contact_id_lis))).filter(FUContact._id.in_(contact_id_lis))).all()
q = None
for medium_contact_id_tup in medium_contact_id_lis:
medium_contact_id = medium_contact_id_tup[0]
if q is None:
q = (g.session.query(FUMessage)
.filter(FUMessage.fu_medium_contact_id == medium_contact_id)
.limit(MESSAGE_LIMIT)
)
else:
subq = (g.session.query(FUMessage)
.filter(FUMessage.fu_medium_contact_id == medium_contact_id)
.limit(MESSAGE_LIMIT)
)
q = q.union(subq)
q = q.order_by(desc(FUMessage.timestamp_utc))
Da die Unterabfragen, die die Vereinigung bilden nicht bestellen Vor dem Limit sind Ihre Ergebnisse unbestimmt. –