这里的Postgresql概念是重叠 https://www.postgresql.org/docs/13/functions-array.html数组,使用实现&&
操作员:
test# SELECT ARRAY['a', 'x'] && ARRAY['a', 'b', 'c'] AS overlaps;
overlaps
══════════
t
(1 row)
test# SELECT ARRAY['q', 'x'] && ARRAY['a', 'b', 'c'] AS overlaps;
overlaps
══════════
f
(1 row)
SQLAlchemy 提供了overlap https://docs.sqlalchemy.org/en/14/dialects/postgresql.html#sqlalchemy.dialects.postgresql.ARRAY.Comparator.overlap方法上的ARRAY https://docs.sqlalchemy.org/en/14/dialects/postgresql.html#sqlalchemy.dialects.postgresql.ARRAY输入实现的 Postgresql 方言&&
.
ORM 查询检查至少包含以下之一的列'a'
and 'z'
看起来像
session.query(MyModel).filter(MyModel.array_field.overlap(['a', 'z']))
或 SQLAlchemy 2.0 风格:
select(MyModel).where(MyModel.array_field.overlap(['a', 'z']))
或者如果您更喜欢接近 Postgres 语法:
select(MyModel).where(MyModel.array_field.op('&&')(['a', 'z']))