[英]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_agg
和array_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.