sql >> Databasteknik >  >> RDS >> PostgreSQL

SQLAlchemy, PostgreSQL och array_agg:Hur väljer man objekt från array_agg?

Du gör förmodligen allt rätt, men får tomma arrayer först. I din tidigare fråga använde du in-python-filtrering (len(x[1]) > 1 ). Du kan skriva ut Query uttryck innan du kör det för att vara säker.

Du bör förmodligen lägga till en having klausul till din basfråga:

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

Då behöver du inte heller in-python-filtrering.




  1. Django south migration - Lägger till FULLTEXT-index

  2. Använda olika MySQL-lagringsmotorer i databasdesign

  3. Installera Oracle 12c Enterprise Edition på Windows 7

  4. Är semikolon nödvändigt i SQL?