PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

SQLAlchemy, PostgreSQL i array_agg:Jak wybrać elementy z array_agg?

Prawdopodobnie robisz wszystko dobrze, ale najpierw otrzymujesz puste tablice. W poprzednim zapytaniu użyłeś filtrowania w Pythonie (len(x[1]) > 1 ). Możesz wydrukować Query wyrażenie przed wykonaniem, aby się upewnić.

Powinieneś prawdopodobnie dodać having klauzula do zapytania podstawowego:

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

Wtedy też nie będziesz potrzebować filtrowania w Pythonie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Daj użytkownikowi uprawnienia do ZMIANY funkcji

  2. Postgres NIE w tablicy

  3. Powolne zapytanie w widoku UNION ALL

  4. Odpowiedź Json na konwersję daty i godziny postgresql Java postgresql

  5. Czy ograniczenie Postgres UNIQUE implikuje indeks?