Как из pythona с помощью asyncpg сделать sql запрос с переменным количеством входных данных?

Как из Python с помощью asyncpg сделать SQL-запрос с переменным количеством входных данных (количество входных данных в кортеже определяется в рантайме)? К примеру, у меня есть строка запроса

SELECT word, translation FROM dictionary WHERE id IN($1, $2)

как вместо $1, $2 сделать так, чтобы запрос определял количество переменных, исходя из количества элементов кортежа?


Ответы (1 шт):

Автор решения: mrEvgenX

По мне, как один из допустимых вариантов - использовать массивы в postgresql.

conn = await asyncpg.connect(connection_url)
rows = await conn.fetch("SELECT word, translation FROM dictionary WHERE id = ANY($1::int[]);", [1,2])

Вместо $1::int[] будет подставлен ARRAY([1, 2]).

Как здесь https://github.com/MagicStack/asyncpg/issues/496.

А WHERE id = ANY(ARRAY([1, 2])) сработает как использование оператора IN.

Как описано здесь http://fkn.ktu10.com/?q=node/7468.

Поэтому в качестве ответа вернется из базы две записи с id равными 1 и 2.

→ Ссылка