Мне нужно вставить строки в PG, одно из полей - дата и время с отметкой времени, это время инцидента, поэтому я не могу использовать функцию → current_timestamp функции Postgres во время вставки, поэтому как можно Затем я вставляю время и дату, которые я собрал ранее, в строку pg в том же формате, который был бы создан current_timestamp в этот момент времени.
Как вставить current_timestamp в Postgres через python
Ответ 1
Временная метка не имеет "формата".
Рекомендуемым способом обработки временных меток является использование PreparedStatement, где вы просто передаете местозаполнитель в SQL и передаете "реальный" объект через API вашего языка программирования. Поскольку я не знаю Python, я не знаю, поддерживает ли он PreparedStatements и как будет синтаксис для этого.
Если вы хотите разместить литерал timestamp в своем сгенерированном SQL, вам нужно будет следовать некоторым правилам форматирования при указании значения (буква имеет формат).
Метод Ivan будет работать, хотя я не уверен на 100%, если он зависит от конфигурации сервера PostgreSQL.
Независимым решением конфигурации (и языка) для указания литерала timestamp является стандарт 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'));
Ответ 2
Если вы используете psycopg2
(и, возможно, какую-то другую клиентскую библиотеку), вы можете просто передать Python datetime
как parameter в SQL-запрос:
from datetime import datetime
dt = datetime.now()
cur.execute('INSERT INTO some_table (somecol) VALUES (%s)', (dt,))
Дополнительные типы Python, которые могут быть адаптированы к SQL (и возвращены как объекты Python при выполнении запроса), перечислены здесь.
Ответ 3
Просто используйте 'now'
http://www.postgresql.org/docs/8.0/static/datatype-datetime.html
Ответ 4
Ввод даты и времени принимается практически в любом разумном формате, включая ISO 8601, SQL-совместимые, традиционные POSTGRES и другие. Для некоторых форматов, порядок ввода месяца, дня и года в дату неоднозначно, и есть поддержка для указания ожидаемого порядка эти поля.
Другими словами: просто напишите что-нибудь, и оно будет работать.
Или отметьте эту таблицу со всеми однозначными форматами.
Ответ 5
Конечно, просто передайте строковое значение для этого столбца timestamp в формате: '2011-05-16 15:36:38'
(вы также можете добавить там часовой пояс, например 'PST'
). PostgreSQL автоматически преобразует строку в метку времени. См. http://www.postgresql.org/docs/9.0/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT
Ответ 6
вы можете попробовать это,
from datetime import datetime as dt
then use this in your code:
cur.execute('INSERT INTO my_table (dt_col) VALUES (%s)', (dt.now(),))
Ответ 7
Просто используйте
сейчас()
или
CURRENT_TIMESTAMP
Я предпочитаю последнее, поскольку мне нравится не иметь дополнительной круглой скобки, но это только личное предпочтение.