[英]Use SQL functions like substr(X, Y, Z) in SQLAlchemy query
我不知道如何將SQLite的函數(例如substr(X,Y,Z))與SQLAlchemy的查詢表達式語法一起使用。 我知道我可以使用原始查詢,但這會使重用where子句更加困難。 這是我的用例:
我有一個文件頭表(或模型類),可以查詢該表以識別和列出某些類型的文件。
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)
例如,要識別Exif圖像,我可以使用以下原始查詢:
select * from blob where substr(header,7,4) = X'45786966'
X'45786966'
只是用於以ASCII編碼的字符串Exif
的SQLite BLOB
文字。 實際上,where子句更為復雜,我想將它們用作聯接的過濾條件,大致如下:
# 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)
有沒有辦法用SQLAlchemy做到這一點?
好。 這太簡單了。
from sqlalchemy.sql import func
exif_conditions = [func.substr(Blob.header, 7, 4) == b'Exif']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.