Как искать несколько значений в столбце с помощью Sqlalchemy postgres - PullRequest
0 голосов
/ 02 июля 2019

У меня есть запрос в PostgreSQL, который ищет и выбирает все строки со значениями «0» или «3» внутри столбца с массивами, называемого «новости».Этот столбец имеет массив из нескольких значений.Например:

id   | country | news
--------------------- 
one  | xyz     | {'2','4','8'}
two  | esc     | {'0','4','2'}
three| eec     | {'9','3','5'}

Итак,

SELECT * FROM table WHERE news && '{"0", "3"}';

приводит к выбору второй и третьей строки.Отлично.Но мне нужно сделать это в sqlalchemy.

Кто-нибудь знает, как это можно написать в SQLalchemy?

@ balderman помог мне с ресурсами, которые я использовал для созданияс этим кодом sqlalchemy:

full_id_list = []
for n in ['0','3']:
    ids = db.session.query(table).filter(table.news.op('@>')([n]))
    full_id_list.append(booklist)

Но есть ли более простой способ без использования цикла for?

Ответы [ 2 ]

1 голос
/ 02 июля 2019

См. https://docs.sqlalchemy.org/en/13/dialects/postgresql.html#sqlalchemy.dialects.postgresql.ARRAY.Comparator

query = session.query(table).filter(table.news.contains([some_int])).all()
0 голосов
/ 06 июля 2019

Наконец-то решено.

db.session.query(Table).filter(Table.news.op('&&')(['0','3']))

Все, что мне нужно было сделать, это изменить операцию (.op) с @> на &&, потому что && означает, что вы можете искать несколько значений внутри столбца смассив значений.

...