繁体   English   中英

如何根据 sqlalchemy 中的 postgres ARRAY 类型长度进行过滤?

[英]How to filter based on postgres ARRAY type length in sqlalchemy?

我正在尝试根据数组列的长度过滤数据库以获取结果。 具体来说,我需要得到长度<=给定值的结果。

例如:

| COLNAME     |
+-------------+
| {1}         |
| {3,20,3400} |
| {1,4,7}     |
| {3,3279}    |
| {1,4}       |
| {3}         |
| {1,4,54}    |
| {3,44}      |
| {}          |

我需要让我们说长度<= 2,预期的结果是:

| COLNAME  |
+----------+
| {1}      |
| {3,3279} |
| {1,4}    |
| {3}      |
| {3,44}   |
| {}       |

我是新手,所以我无法自己正确找到它。 array_aggarray_length or cardinality (array_length gives null for empty array, I would prefer 0, which cardinality is giving)函数可能会有所帮助,我正在研究如何正确使用它,但如果有人知道这将是一个很大的帮助。

我已经设法编写了原始 sql 查询,只需要一些帮助转换为 sqlalchemy:

SELECT *
FROM
(SELECT *, cardinality(COLNAME) AS X FROM tablename) as mod
WHERE X <= 2;

编辑:我想问题主要是我不明白如何正确使用 sqlalchemy,我现在刚刚使用db.engine.execute('SQL statements').fetchall() ,我会在我发布答案时够好了。

事实证明它比我想象的要简单。

res = obj.query.filter(func.cardinality(obj.colname) <= val).all()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM