如何通过 unnest 结果 search/filter?

How to search/filter by unnest result?

我想在 ARRAY(TEXT)(使用 PostgreSQL)中 search/filter(不区分大小写)。虽然我发现直接不可能,但有人建议可以使用unnest的解决方案,所以我开始了。

我使用的table如下:

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的结果转成小写?

我可以通过以下方式解决这个问题:

result = session.query(cls.id).select_from(func.unnest(cls.solutions).alias("sols")).filter(column("sols").ilike(f"%a%"))

如果有人发布更好的解决方案,我会重新采纳答案。