簡體   English   中英

在SQLAlchemy查詢中使用諸如substr(X,Y,Z)之類的SQL函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM