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

SqlAlchemy:interrogazione del campo json di lunghezza con un array

Ho trovato una soluzione

Crea una classe che estenda FunctionElement in questo modo

from sqlalchemy.sql.expression import FunctionElement
from sqlalchemy.ext.compiler import compiles
class json_array_length(FunctionElement):
    name = 'json_array_len'

@compiles(json_array_length)
def compile(element, compiler, **kw):
    return "json_array_length(%s)" % compiler.process(element.clauses)

e usalo così

session.query(Post.id, json_array_length(Post.items))

Nota:funzionerà su Postgres perché la funzione 'json_array_length' è definita al suo interno. Se lo desideri per un DB diverso, quella funzione dovrà cambiare. Fare riferimento a http://docs.sqlalchemy.org/en/rel_0_9/core/compiler.html#further-examples