Я пытаюсь отфильтровать базу данных, чтобы получить результат на основе длины столбца массива. В частности, мне нужно получить результаты, длина которых <= заданное значение.
Например:
| 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()
, я отправлю ответ, когда буду достаточно хорошо.
Вы должны иметь возможность использовать
func.cardinality()
в SQLAlchemy.