我正在尝试使用通配符和不区分大小写的方式搜索 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)
尝试将 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)