psycopg2 не преобразует массив python в правильный psql?

#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 предложении, это нарушит запрос.