ошибка вставки временной метки postgresql с помощью python

#python #postgresql #timestamp #psycopg2

#python #postgresql #временная метка #psycopg2

Вопрос:

Я использую psycopg2 для postgresql. Вот мой фрагмент:

 a = "INSERT INTO tweets (Time) VALUES (%s);" % (datetime.now(),)

cursor.execute(a)
  

это не сработает и выдает ошибку:

 ProgrammingError: syntax error at or near "20"
LINE 1: INSERT INTO tweets (Time) VALUES (2016-10-03 20:14:49.065092...
  

Однако, если я выполню этот путь:

 cursor.execute("INSERT INTO tweets (Time) VALUES (%s);", (datetime.now(),))
  

это работает. Я хочу знать, в чем разница между этими двумя выражениями и что не так с первым. Могу ли я выполнить эту функцию, используя первую структуру?

Комментарии:

1. В первом используется подстановка строк Python. Второй использует передачу параметров Psycopg и является единственным рекомендуемым.

Ответ №1:

Если вы проверяете первый запрос, он указывает INSERT INTO tweets (Time) VALUES (2016-10-03 20:14:49.065092... , что это означает, что он пытается использовать значение без кавычек в качестве времени, и это не сработает.

Если вы действительно хотите использовать свой первый подход, вы должны указать значение:

 a = "INSERT INTO tweets (Time) VALUES ('%s');" % (datetime.now(),)
cursor.execute(a)
  

Я бы посоветовал вам использовать второй подход, при котором клиентская библиотека обрабатывает все кавычки и обычно предотвращает множество возможных проблем, таких как внедрение SQL.

Комментарии:

1. Даже не предлагайте использовать первый подход