Dynamisches Erstellen von Filtern in SQLAlchemy

Ich suche nach einer Möglichkeit, Filter mithilfe von SQLAlchemy dynamisch zu erstellen. Wenn also die Spalte, der Operatorname und der Vergleichswert angegeben werden, wird der entsprechende Filter erstellt.

Ich werde versuchen, dies anhand eines Beispiels zu veranschaulichen (dies würde zum Erstellen einer API verwendet werden). Angenommen, wir haben das folgende Modell:

class Cat(Model):

  id = Column(Integer, primary_key=True)
  name = Column(String)
  age = Column(Integer)

Ich möchte den Filtern Abfragen zuordnen. Zum Beispiel,

/cats?filter=age;eq;3 generieren sollteCat.query.filter(Cat.age == 3)

/cats?filter=age;in;5,6,7&filter=id;ge;10 generieren sollteCat.query.filter(Cat.age.in_([5, 6, 7])).filter(Cat.id >= 10)

Ich habe mich umgesehen, um zu sehen, wie es gemacht wurde, konnte aber keinen Weg finden, bei dem nicht jeder Operatorname manuell einem Komparator oder Ähnlichem zugeordnet wurde. Zum Beispiel,Kolben-Restless führt ein Wörterbuch aller unterstützten Operationen und speichert die entsprechenden Lambda-Funktionen (Code hier).

Ich habe in den SQLAlchemy-Dokumenten nach zwei möglichen Hinweisen gesucht, aber keine davon schien zufriedenstellend zu sein:

mitColumn.like, Column.in_...: Diese Operatoren stehen direkt in der Spalte zur Verfügung, was die Verwendung vereinfachen würdegetattr aber einige fehlen noch (==, >, usw.).

mitColumn.op: z.B.Cat.name.op('=')('Hobbes') Dies scheint jedoch nicht bei allen Betreibern zu funktionieren (in nämlich).

Gibt es eine saubere Möglichkeit, dies ohne zu tunlambda Funktionen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage