【发布时间】:2021-10-14 23:00:43
【问题描述】:
我想在 ARRAY(TEXT) 中搜索/过滤(不区分大小写)(使用 PostgreSQL)。虽然我发现直接不可能,但有人建议可以使用 unnest 的解决方案,所以我开始了。
我使用的表格如下:
from sqlalchemy.dialects.postgresql import ARRAY
class CaseStudy(db.Model): # type: ignore
__tablename__ = "case_studies"
id = db.Column(db.Integer, primary_key=True)
...
solutions = db.Column(ARRAY(db.Text))
...
我可以用纯 SQL 做类似的事情(减去小写部分):SELECT * FROM case_studies WHERE 'a' IN (select(unnest(case_studies.solutions)));
但我无法将其转换为 SQLAlchemy。我认为我得到的最接近的是result = session.query(cls.id).filter('a' in func.unnest(cls.solutions))
(但我得到了NotImplementedError: Operator 'contains' is not supported on this expression)
或result = session.query(cls.id).filter("a" in select(func.unnest(cls.solutions)))
但后来我得到TypeError: argument of type 'Select' is not iterable。
任何建议如何在 SQLAlchemy 中做到这一点?另外,如何将unnest的结果转为小写?
【问题讨论】:
标签: python sql postgresql sqlalchemy