Python SQLAlchemy:如何过滤PgArray列类型?

Python SQLAlchemy:如何过滤PgArray列类型?,python,sql,postgresql,sqlalchemy,Python,Sql,Postgresql,Sqlalchemy,在纯postgres中,我们可以写: 从my_表中选择*,其中10000=ANY(数组_字段); 或 从my_表中选择*,其中10000=ALL(数组_字段); 如何在没有原始sql的情况下借助sqlalchemy实现同样的功能?a=ANY(b_数组)相当于中的a(b_数组的元素)1 因此,您可以使用 我不记得在我使用PostgreSQL的这些年里,我曾经使用过a=ALL(b_数组)。有吗 如果您正在处理一个数组列,并希望测试该列中是否包含给定元素(或给定数组的所有元素),那么您可以利用@

在纯postgres中,我们可以写:

从my_表中选择*,其中10000=ANY(数组_字段);

从my_表中选择*,其中10000=ALL(数组_字段);
如何在没有原始sql的情况下借助sqlalchemy实现同样的功能?

a=ANY(b_数组)
相当于
中的
a
(b_数组的元素)
1

因此,您可以使用

我不记得在我使用PostgreSQL的这些年里,我曾经使用过
a=ALL(b_数组)
。有吗


如果您正在处理一个数组列,并希望测试该列中是否包含给定元素(或给定数组的所有元素),那么您可以利用
@>
包含
)或更合适的反向同级
我的。您的语句在SQLA中可能如下所示:

s=select([my_table],array_field.op('@>')('array[10000]'))
或使用PostgreSQL数组值的可选输入语法:

s=select([my_table],array_field.op('@>')(cast('{10000}',int[]))

1空处理有一个细微的区别:


选择“{NULL}”:int[]好的,如何编写这样的查询:
从my_表中选择*其中5=ANY(数组_字段)
?据我所知,在这种情况下,
中的
不会有帮助
Session.query(MyTable).filter(MyTable.array_field.in_(???)).all()
@VitaliPonomar:抱歉,删除了误导性信息。我进一步研究了这个问题,认为我找到了一个合适的解决办法。考虑修改后的答案,我有一个问题。如何从[10000200600]=ANY(数组字段)的表中写入
SELECT*-如果
[10000200600]
中的任何一个值出现在列
数组(字段
)中,则选择该行。如果要使用
所有
数组比较器,请从Postgres方言(
来自sqlalchemy.dialogs.postgresql导入所有
)导入该行,并将其作为参数传递给
()
查询对象上的方法:
Query.having(All(1,funct.array\u agg(Widget.id))