Подтвердить что ты не робот

Как вставить current_timestamp в Postgres через python

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

4b9b3361

Ответ 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 при выполнении запроса), перечислены здесь.

Ответ 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

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