PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SqlAlchemy :Interroger le champ json de longueur ayant un tableau

Trouvé une solution

Créez une classe qui étend FunctionElement comme ceci

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)

et l'utiliser comme ça

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

Remarque :cela fonctionnera sur postgres car la fonction 'json_array_length' y est définie. Si vous le souhaitez pour une base de données différente, cette fonction devra être modifiée. Reportez-vous à http://docs.sqlalchemy.org/en/rel_0_9/core/compiler.html#further-examples