Ich konnte nicht herausfinden, wie SQLite Funktionen wie substr(X, Y, Z) mit SQLAlchemy Query Ausdruck Syntax verwenden. Ich bin mir bewusst, dass ich rohe Abfragen verwenden könnte, aber das würde es schwieriger machen, meine Where-Klauseln wiederzuverwenden. Hier ist mein Anwendungsfall:Verwenden Sie SQL-Funktionen wie substr (X, Y, Z) in SQLAlchemy Query
Ich habe eine Tabelle (oder Modellklasse) von Dateiheadern, die ich abfragen, um Dateien bestimmter Typen zu identifizieren und aufzulisten.
class Blob(Base):
__tablename__ = 'blob'
_id = Column('_id', INTEGER, primary_key=True)
size = Column('size', INTEGER)
hash = Column('hash', TEXT)
header = Column('header', BLOB)
meta = Column('meta', BLOB)
Zum Beispiel Exif Bilder zu identifizieren, ich diese rohe Abfrage verwenden:
select * from blob where substr(header,7,4) = X'45786966'
X'45786966'
einfach die SQLite ist BLOB
wörtliche für die Zeichenfolge Exif
in ASCII codiert. In Wirklichkeit sind die where-Klauseln komplexer, und ich möchte sie als Filterbedingungen wieder verwenden für beitritt, etwa wie folgt aus:
# define once at module level
exif_conditions = [functions.substr(Blob.header, 7, 4) == b'Exif']
# reuse for arbitrary queries
session.query(Blob.hash).filter(*exif_conditions)
session.query(...).join(...).options(...).filter(condition, *exif_conditions)
Gibt es eine Möglichkeit, dies mit SQLAlchemy zu erreichen?