Как из pythona с помощью asyncpg сделать sql запрос с переменным количеством входных данных?
Как из Python с помощью asyncpg сделать SQL-запрос с переменным количеством входных данных (количество входных данных в кортеже определяется в рантайме)? К примеру, у меня есть строка запроса
SELECT word, translation FROM dictionary WHERE id IN($1, $2)
как вместо $1, $2 сделать так, чтобы запрос определял количество переменных, исходя из количества элементов кортежа?
Ответы (1 шт):
По мне, как один из допустимых вариантов - использовать массивы в 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.