a = ANY(b_array)等于1。
a
IN
(elements_of_b_array)
因此,您可以使用该
in_()方法。
我不记得曾经使用
a = ALL(b_array)PostgreSQL多年。你?
如果您要处理 数组列, 并想测试该 列中
是否包含给定元素(或给定数组的所有元素),则可以利用PostgreSQL数组运算符
@>(
contains)或更合适地利用反同级
<@(
iscontained by)。
数组运算符的优点是可以通过数组列上的 GIN索引 来支持它们(与
ANY构造不同)。
您的SQL语句:
SELECt * FROM my_table WHERe 10000 = ANY (array_field);
(几乎)等于1
SELECt * FROM my_table WHERe 10000 <@ array_field;
我不是SQLAlchemy的专家,但是根据SQLAlchemy手册中的教程,您可以使用任何运算符:
如果遇到确实不可用的运算符,则可以始终使用该
op()方法。这将生成您需要的任何运算符:>>> print users.c.name.op('tiddlywinks')('foo') users.name tiddlywinks:name_1
大胆强调我的。您的语句在SQLA中可能如下所示:
s = select([my_table], array_field.op('@>')('ARRAY[10000]'))或使用PostgreSQL数组值的替代输入语法:
s = select([my_table], array_field.op('@>') (cast('{10000}', int[])))1与NULL处理有一个细微的区别:
SELECT '{NULL}'::int[] <@ ... -- that's an array with a single NULL element总是屈服
FALSE。
SELECT NULL IN (...)SELECT NULL = ANY (...)SELECT NULL::int[] <@ ...
总是屈服
NULL。
如果您不打算查询
NULL值,则可以忽略它。



