SQLAlchemy:在 Postgresql 中对 JSON 数据进行不区分大小写的搜索

问题描述 投票:0回答:1

我正在尝试使用通配符和不区分大小写的方式搜索 Postgresql 数据库中 JSON 列中的数据。

这里我看到我可以进行如下查询:

WHERE LOWER(data::text) LIKE '%<keyword>%'

这可行,但现在我陷入了如何在 SQLAlchemy 中实现这一点的困境。我怎样才能得到这个

::text
后缀?我该如何对这个中间表达式做
LOWER(...)

我一直在寻找类似的东西,但它会导致语法错误:

        filter_condition = func.lower(Table.data.text())).contains(search)

        stmt = (
            select(Table)
            .filter(filter_condition)
            # ... move
        )

        print(stmt)
postgresql sqlalchemy
1个回答
0
投票

尝试将 JSON

column
转换为文本,然后在使用 contains >>

之前对其应用较低的函数
 from sqlalchemy import select, func
    
    # Assuming Table.data is your JSON column
    filter_condition = func.lower(Table.data.cast(sqlalchemy.Text)).contains(func.lower('%<keyword>%'))
    
    stmt = (
        select(Table)
        .filter(filter_condition)
    )
    
    print(stmt)
© www.soinside.com 2019 - 2024. All rights reserved.