#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. Даже не предлагайте использовать первый подход