sql >> Database teknologi >  >> RDS >> PostgreSQL

SQLAlchemy, PostgreSQL og array_agg:Hvordan vælger man elementer fra array_agg?

Du gør sandsynligvis alt rigtigt, men får tomme arrays først. I din tidligere forespørgsel brugte du in-python-filtrering (len(x[1]) > 1 ). Du kan udskrive Query udtryk, før du udfører det for at være sikker.

Du bør sandsynligvis tilføje en having klausul til din basisforespørgsel:

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()
)

Så behøver du heller ikke in-python-filtrering.




  1. MySQL Indsæt række, på duplikat:Tilføj suffiks og genindsæt

  2. Hvordan kan jeg importere en stor (14 GB) MySQL-dumpfil til en ny MySQL-database?

  3. Find længden af ​​den længste række i en kolonne i orakel

  4. vælg * fra to tabeller med forskelligt antal kolonner