Как вставить current_timestamp в Postgres через python - PullRequest
39 голосов
/ 16 мая 2011

Мне нужно вставить строки в PG, одно из полей - это дата и время с отметкой времени, это время инцидента, поэтому я не могу использовать функцию -> current_timestamp для Postgres во время вставки, так как можноЗатем я вставляю время и дату, которые я собирал ранее, в строку pg в том же формате, который был бы создан current_timestamp в тот момент времени.

Ответы [ 7 ]

61 голосов
/ 16 мая 2011

Отметка времени не имеет «формат».

Рекомендуемый способ работы с метками времени - использовать PreparedStatement, в котором вы просто передаете заполнитель в SQL и передаете «реальный» объект через API вашего языка программирования.Поскольку я не знаю Python, я не знаю, поддерживает ли он PreparedStatements и каков будет его синтаксис.

Если вы хотите поместить литерал временной метки в ваш сгенерированный SQL, вам нужно будет следоватьнекоторые правила форматирования при указании значения (у литерала есть формат).

Метод Ивана будет работать, хотя я не уверен на 100%, зависит ли это от конфигурации сервера PostgreSQL.

Независимое от конфигурации (и языка) решение для указания литерала метки времени:стандарт ANSI SQL:

 INSERT INTO some_table 
 (ts_column) 
 VALUES 
 (TIMESTAMP '2011-05-16 15:36:38');

Да, это ключевое слово TIMESTAMP, за которым следует метка времени, отформатированная в стиле ISO (ключевое слово TIMESTAMP определяет этот формат)

Другое решение будетиспользовать функцию to_timestamp(), где вы можете указать формат входного литерала.

 INSERT INTO some_table 
 (ts_column) 
 VALUES 
 (to_timestamp('16-05-2011 15:36:38', 'dd-mm-yyyy hh24:mi:ss'));
33 голосов
/ 06 октября 2015

Если вы используете psycopg2 (и, возможно, некоторую другую клиентскую библиотеку), вы можете просто передать объект Python datetime в качестве параметра вSQL-запрос:

from datetime import datetime

dt = datetime.now()
cur.execute('INSERT INTO some_table (somecol) VALUES (%s)', (dt,))

Больше типов Python, которые могут быть адаптированы к SQL (и возвращены как объекты Python при выполнении запроса), перечислены здесь .

7 голосов
/ 16 мая 2011

Просто используйте «сейчас»

http://www.postgresql.org/docs/8.0/static/datatype-datetime.html

2 голосов
/ 12 ноября 2012

Ввод даты и времени допускается практически в любом приемлемом формате, включая ISO 8601, SQL-совместимые, традиционные POSTGRES и другие.Для некоторых форматов порядок ввода даты, месяца и года неоднозначен, и существует поддержка для определения ожидаемого порядка этих полей.

Другими словами: просто напишите что-нибудь, и это будет работать.

Или проверьте эту таблицу со всеми однозначными форматами.

1 голос
/ 16 мая 2011

Конечно, просто передайте строковое значение для этого столбца отметки времени в формате: '2011-05-16 15:36:38' (вы также можете добавить часовой пояс, например, 'PST').PostgreSQL автоматически преобразует строку в метку времени.Смотри http://www.postgresql.org/docs/9.0/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT

0 голосов
/ 20 марта 2015
from datetime import datetime as dt

затем используйте это в своем коде:

cur.execute('INSERT INTO my_table (dt_col) VALUES (%s)', (dt.now(),))
0 голосов
/ 05 сентября 2013

Просто используйте

сейчас ()

или

CURRENT_TIMESTAMP

Я предпочитаю последнеетак как мне нравится не иметь дополнительных скобок, но это просто личные предпочтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...