Изменение типа времени для Postgres в Python - PullRequest
0 голосов
/ 19 октября 2019

У меня есть время из таблицы, которая принимает эту форму:

2017-12-31T23:59:59.8560818Z

Я не совсем уверен, что это за форма на самом деле. Все, что я знаю, - это то, что я хочу преобразовать его в python в тип времени, который допустимо вставить в таблицу postgres в качестве метки времени или даты (мне действительно важна только дата). Любые идеи для лучшего способа сделать это, чем просто взять подстроку даты?

Когда я пытаюсь это сделать:

exchange_rate['time'] = str(exchange_rate['time'])[:10]  #captures the YYY-MM-DD from date
exchange_rate['time'] = datetime.datetime.strptime(exchange_rate['time'], '%Y-%m-%d') #converts to datetime

cursor.execute('''INSERT INTO bitcoin VALUES ({},{})'''.format(exchange_rate['time'],exchange_rate['rate']))

Я получаю эту ошибку:

enter image description here

1 Ответ

1 голос
/ 19 октября 2019
  • Дата-литералы должны быть в кавычках (в противном случае токенизатор может запутаться ...)
  • , если вы хотите отрезать доли секунды, date_trunc() может бытьиспользуется.

CREATE TABLE bogus
        ( id integer PRIMARY KEY
        , ztimestamp TIMESTAMP WITH TIME ZONE NOT NULL
        );
INSERT INTO bogus(id,ztimestamp) VALUES
 ( 1, '2017-12-31T23:59:59.8560818Z')
,( 2, DATE_TRUNC('sec', '2017-12-31T23:59:59.8560818Z'::timestamp))
        ;

SELECT * FROM bogus;

РЕЗУЛЬТАТ:


CREATE TABLE
INSERT 0 2
 id |          ztimestamp           
----+-------------------------------
  1 | 2018-01-01 00:59:59.856082+01
  2 | 2017-12-31 23:59:59+01
(2 rows)
...