Peewee: как сделать запрос с набором кортежей? - PullRequest
0 голосов
/ 21 марта 2020

Моя SQL таблица:

CREATE TABLE Message (
    message_id varchar(40) PRIMARY KEY NOT NULL,
    channel_id integer NOT NULL,
    user_id integer NOT NULL,
) 

У меня есть набор кортежей, первый элемент - поле user_id, а второй - поле channel_id. Пример набора:

user_channel_set = {(156, 23), (235, 15), (156, 15)} 

Я хотел бы знать, есть ли способ сделать это, но только с одним запросом.

for t in user_channel_set:
    Message.select().where((Message.user_id == t[0]) & (Message.channel_id == t[1]))

1 Ответ

0 голосов
/ 23 марта 2020

Хороший вопрос. Вы можете попробовать использовать оператор VALUES и выражение общей таблицы.

val_list = ValuesList(list(user_channel_set)).cte('vals', columns=['uid', 'cid'])
query = (Message
         .select()
         .join(val_list, on=(
             (Message.user_id == val_list.c.uid) &
             (Message.channel_id == val_list.c.cid)))
         .with_cte(val_list))
...