PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SqlAlchemy:Abfrage des Längen-json-Felds mit einem Array

Lösung gefunden

Erstellen Sie eine Klasse, die FunctionElement wie folgt erweitert

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)

und verwenden Sie es so

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

Hinweis:Dies funktioniert auf Postgres, da die Funktion ‚json_array_length‘ darin definiert ist. Wenn Sie dies für eine andere Datenbank wünschen, muss diese Funktion geändert werden. Siehe http://docs.sqlalchemy.org/en/rel_0_9/core/compiler.html#weitere-beispiele