#python #arrays #psycopg2
Вопрос:
items= ['john','bushes']
cursor.mogrify("select something from table where something = ANY(%s)", (items,))
Приведенный выше запрос создает что-то вроде МАССИВА[a,b], выполнение которого займет несколько минут.
Я ожидал,что запрос будет выглядеть так (‘{a, b’}) в моем запросе psql, который работает в миллион раз быстрее.
Не уверен, как заставить его правильно выполнять запрос из массива.
Я сделал приведенный ниже код в качестве временного решения, но, очевидно, он открывает его для уязвимостей:
items= ['john','bushes']
def proper_psycarr(arr):
return ['{' ','.join(arr) '}']
cursor.mogrify("select something from table where something = ANY(%s)", proper_psycarr(items))
Есть ли лучший способ сделать это?
Комментарии:
1. А если вместо этого ты превратишься
items
в аset
илиtuple
а?2. Вероятно, вы также можете использовать
IN
вместо= ANY
в своем запросе.3. Я только что попробовал запустить
SELECT ARRAY['a','b'];
его в командной строке, и он фактически преобразуется в массив фигурных скобок. Однако, если я сделаю это вWHERE
предложении, это нарушит запрос.