Почему psycopg2 не выполняющий ни одну из моих функций SQL? (IndexError: индекс кортежа из диапазона)

Чтобы заставить его работать межплатформенный, просто поместите следующее в Ваш vimrc:

nmap  i=strftime("%Y-%m-%d %a %I:%M %p")
imap  =strftime("%Y-%m-%d %a %I:%M %p")

Теперь можно просто нажать F3 любое время в Vi/Vim, и Вы получите метку времени как 2016-01-25 Mo 12:44 вставленный в курсоре.

Для полного описания доступных параметров проверяют документация функции C strftime () .

16
задан Monika Sulik 16 November 2009 в 12:35
поделиться

3 ответа

По умолчанию psycopg2 идентифицирует заполнители аргументов с помощью символа % (обычно в строке есть % s ).

Итак, если вы используете cursor.execute ('...% s,% s ...', (arg1, arg2)) , тогда эти % s будут превращены в значения arg1 и arg2 соответственно.

Но поскольку вы вызываете: cursor.execute (sql_function_above) , без дополнительных аргументов, и ваш SQL включает % знаков, что библиотека пытается чтобы найти второй аргумент, переданный в функцию, который находится вне допустимого диапазона, следовательно, возникла ошибка IndexError.

Решение: Вместо использования % , напишите %% в ваша переменная SQL. Это преобразуется в буквальный % перед отправкой в ​​PostgreSQL.

30
ответ дан 30 November 2019 в 17:05
поделиться

Индекс вне допустимого диапазона означает, что вы пытались получить доступ (например) к третьему элементу кортежа, который имеет только два элемента. Обратите внимание, что индексы Python начинаются с 0, поэтому двухэлементный кортеж с именем myTuple будет иметь элементы myTuple [0] и myTuple [1], но не будет элемента myTuple [2].

1
ответ дан 30 November 2019 в 17:05
поделиться

Похоже, вы не фиксируете транзакцию:

Попробуйте ввести:

cursor.execute("COMMIT")

После последней строки и посмотрите, работает ли это.

Вы также можете установить уровень изоляции на autocommit, например:

connection.set_isolation_level(0)

Подробнее об этом в этом ответе

3
ответ дан 30 November 2019 в 17:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: