Как удалить несколько массивов в запросе SQLAlchemy? - PullRequest
0 голосов
/ 08 марта 2020

Я использую PostgreSQL 11 и SQLAlchemy. У меня есть следующая таблица, сопоставленная с классом PostSignature:

             Table "public.post_signature"
  Column   |   Type    | Collation | Nullable | Default
-----------+-----------+-----------+----------+---------
 post_id   | integer   |           | not null |
 signature | bytea     |           | not null |
 words     | integer[] |           | not null |
Indexes:
    "post_signature_pkey" PRIMARY KEY, btree (post_id)
Foreign-key constraints:
    "post_signature_post_id_fkey" FOREIGN KEY (post_id) REFERENCES post(id)

Для контекста я хочу отсортировать, создав значение «Score», которое является счетчиком количества элементов в «словах». которые соответствуют параметру запроса. Я хочу, чтобы сопоставление было поэлементным, а не просто пересечением множества. Все массивы имеют одинаковое количество элементов.

Я обнаружил, что следующий необработанный запрос SQL выполняет эту задачу:

SELECT s.post_id, s.signature, count(a.query) AS score 
FROM post_signature AS s, unnest(s.words, $1) AS a(word, query) 
WHERE a.word = a.query 
GROUP BY s.post_id 
ORDER BY score DESC LIMIT 100;

Я хочу написать это как оператор SQLAlchemy, который было бы эквивалентно этому. Что-то вроде: session.query(PostSignature).<some statement>.limit(100).all()

Кто-нибудь знает, как я могу построить этот запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...