Вставка путем удаления «000000» в отметке времени unix - PullRequest
0 голосов
/ 05 апреля 2020

Я вставляю некоторые данные для python, которые поступают из GET в API FLASK, например JSON, по какой-то причине, когда python вставит эти данные или, возможно, postgres, он удаляет 000000

Данные json:

{
"datecollect": 1585983000000
}

Вставить py:

    conn.execute('''INSERT INTO "TBLNAME"
    (value1,value2,value3,value4,value5)
    VALUES ('{0}','{1}','{2}',to_timestamp({3}) AT TIME ZONE 'UTC',current_timestamp)'''.
    format(server,forecastmemory,levelerror,datecollect))

Исходная дата:

select to_timestamp(1585983000000) AT TIME ZONE 'UTC' --> 52227-10-20 17:20:00

Дата, когда python вставляется в pg sql:

select to_timestamp(1585983) AT TIME ZONE 'UTC' --> 1970-01-19 08:33:03

Преобразование правильное:

enter image description here

Даже при использовании часового пояса веб-сайта, он возвращается с проблемой select to_timestamp(1585983000000) AT TIME ZONE 'GMT-03:00' --> 52227-10-20 20:20:00

1 Ответ

1 голос
/ 05 апреля 2020

Ваше значение метки времени (datecollect), по-видимому, в миллисекундах; вам просто нужно разделить его на 1000, чтобы преобразовать его из миллисекунд в секунды:

SELECT TO_TIMESTAMP(1585983000000/1000) AT TIME ZONE 'UTC'

Вывод:

2020-04-04 06:50:00

Итак, для вашего запроса:

conn.execute('''INSERT INTO "TBLNAME"
(value1,value2,value3,value4,value5)
VALUES ('{0}','{1}','{2}',to_timestamp({3}) AT TIME ZONE 'UTC',current_timestamp)'''.
format(server,forecastmemory,levelerror,datecollect/1000))
...