psycopg2 IndexError: индекс кортежа вне допустимого диапазона. Ошибка при использовании оператора типа «%» с кортежем аргументов.

Это отлично работает:

 cc.execute("select * from books where name like '%oo%'")

Но если передан второй аргумент:

cursor.execute("select * from books where name like '%oo%' OFFSET % LIMIT %", (0,1))

Ошибки Psycopg:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

Как избежать этой ошибки?


person juk    schedule 27.12.2012    source источник


Ответы (1)


Прежде всего, вы должны использовать %% для вставки литерала %, иначе библиотека попытается использовать все % в качестве заполнителей. Во-вторых, лучше указать %s, куда вы хотите вставить значения.

Итак, ваш код должен выглядеть так:

cursor.execute("select * from books where name like '%%oo%%' OFFSET %s LIMIT %s", (0,1))
person cleg    schedule 27.12.2012
comment
Остерегайтесь, что в python 3 вы захотите добавить еще одну запятую в свой кортеж: cursor.execute("select * from books where name like '%%oo%%' OFFSET %s LIMIT %s", (0,1,)), иначе вы получите TypeError: not all arguments converted during string formatting. - person Nicholas Morley; 10.03.2017