sql >> Databáze >  >> RDS >> PostgreSQL

SQLAlchemy, PostgreSQL a array_agg:Jak vybrat položky z array_agg?

Pravděpodobně děláte vše správně, ale nejprve získáte prázdná pole. V předchozím dotazu jste použili filtrování v pythonu (len(x[1]) > 1 ). Můžete vytisknout Query výraz před jeho provedením, abyste se ujistili.

Pravděpodobně byste měli přidat having klauzule na váš základní dotaz:

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

Pak nebudete potřebovat ani filtrování v pythonu.




  1. Převod Play! vývoj frameworku z MySQL na PostgreSQL

  2. Vytvoření propojeného serveru v SQL Server (příklad T-SQL)

  3. MariaDB JSON_MERGE() Vysvětleno

  4. Jak změnit výchozí chování null řazení z PostgreSQL v Django ORM