PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQLAlchemy, PostgreSQL und array_agg:Wie wähle ich Elemente aus array_agg aus?

Sie machen wahrscheinlich alles richtig, erhalten aber zuerst leere Arrays. In Ihrer vorherigen Abfrage haben Sie die In-Python-Filterung verwendet (len(x[1]) > 1 ). Sie können Query drucken Ausdruck, bevor Sie ihn ausführen, um sicherzugehen.

Sie sollten wahrscheinlich ein having hinzufügen Klausel zu Ihrer Basisabfrage:

from sqlalchemy import Integer
from sqlalchemy.dialects.postgresql import ARRAY

cats_agg = func.array_agg(ProductCategory.id, type_=ARRAY(Integer)).label('cats')
prods = (
    session.query(
        Product.id.label('id'),
        cats_agg,
    .outerjoin(
        ProductCategory,
        ProductCategory.product_id == Product.id)
    .group_by(Product.id)
    .having(func.array_length(cats_agg, 1) > 1)
    .subquery()
)

Dann brauchen Sie auch keine In-Python-Filterung.