Чтобы заставить его работать межплатформенный, просто поместите следующее в Ваш 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 () .
По умолчанию psycopg2 идентифицирует заполнители аргументов с помощью символа %
(обычно в строке есть % s
).
Итак, если вы используете cursor.execute ('...% s,% s ...', (arg1, arg2))
, тогда эти % s
будут превращены в значения arg1 и arg2 соответственно.
Но поскольку вы вызываете: cursor.execute (sql_function_above)
, без дополнительных аргументов, и ваш SQL включает %
знаков, что библиотека пытается чтобы найти второй аргумент, переданный в функцию, который находится вне допустимого диапазона, следовательно, возникла ошибка IndexError.
Решение: Вместо использования %
, напишите %%
в ваша переменная SQL. Это преобразуется в буквальный %
перед отправкой в PostgreSQL.
Индекс вне допустимого диапазона означает, что вы пытались получить доступ (например) к третьему элементу кортежа, который имеет только два элемента. Обратите внимание, что индексы Python начинаются с 0, поэтому двухэлементный кортеж с именем myTuple будет иметь элементы myTuple [0] и myTuple [1], но не будет элемента myTuple [2].
Похоже, вы не фиксируете транзакцию:
Попробуйте ввести:
cursor.execute("COMMIT")
После последней строки и посмотрите, работает ли это.
Вы также можете установить уровень изоляции на autocommit, например:
connection.set_isolation_level(0)
Подробнее об этом в этом ответе