是否可以使用“ LIKE”和SqlAlchemy在JSONB列表中搜索值?

时间:2019-06-28 22:33:45

标签: python postgresql sqlalchemy

例如,如果我有一个JSONB列,并将其存储为:

["oranges","apples","bananas"]

如何使用LIKE类型搜索检查子字符串“ app”是否在列表中?

理想情况下,我希望能够执行以下操作:

Basket['fruits'].contains_like('%app%')

sqlalchemy是否可能?

1 个答案:

答案 0 :(得分:0)

利用纯PostgreSQL答案here的启发,您可以创建以下条件:

from sqlalchemy import exists, func, literal_column

exists().select_from(
  func.jsonb_array_elements_text(Basket['fruits']).alias('fruit')
).where(literal_column('fruit').like('%app%'))

答案提出了性能问题,并可能在特殊情况下(当您仅对以某个值开头的字符串感兴趣时)添加索引。看看是否适用于您以及是否遇到性能问题