Невозможно привести тип данных POINT в запросе INSERT к PostgreSQL. Долгота, широта, которую необходимо вставить в таблицу - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь вставить широту и долготу, которые хранятся в виде переменных python, в таблицу в PostgreSQL с помощью запроса INSERT.Любые предложения о том, как разыграть Point, кроме того, что я пробовал?

Сначала я попытался вставить запрос, как показано ниже -

Это таблица:

cur.execute('''CREATE TABLE AccidentList (
        accidentId SERIAL PRIMARY KEY,
        cameraGeoLocation POINT,
        accidentTimeStamp TIMESTAMPTZ);''')

Try1:

cur.execute("INSERT INTO AccidentList(cameraGeoLocation,accidentTimeStamp)
VALUES {}".format((lat,lon),ts));

Ошибка:

> Подсказка: psycopg2.ProgrammingError: столбец "camerageolocation" имеет тип точки, но выражение имеет тип числовой

LINE 1: ... ist (cameraGeoLocation, emergencyTimeStamp) ЗНАЧЕНИЯ (13.0843,8 ... ^

СОВЕТ: Вам нужно будет переписать или привести выражение.

Try2:

query = "INSERT INTO AccidentList (cameraGeoLocation,accidentTimeStamp)
VALUES(cameraGeoLocation::POINT, accidentTimeStamp::TIMESTAMPTZ);"
data = ((lat,lon),ts)
cur.execute(query,data)

Ошибка:

LINE 1: ... List (cameraGeoLocation, emergencyTimeStamp) ЗНАЧЕНИЯ (cameraGeoL ... ^

СОВЕТ: В таблице «список аварий» есть столбец с именем «camerageolocation», но на него нельзя ссылатьсяиз этой части запроса.

Попробуйте 3:

query = "INSERT INTO AccidentList (camerageolocation ,accidenttimestamp) VALUES(%s::POINT, %s);"
    data = (POINT(lat,lon),ts)
    cur.execute(query,data)

Ошибка:

cur.execute (запрос, данные) psycopg2.ProgrammingError: не может привести запись типа к точке LINE 1: ...tion, отметка времени аварии) VALUES ((13.0843, 80.2805) :: POINT, '...

1 Ответ

0 голосов
/ 29 марта 2019

Одиночная кавычка ваша третья попытка.Это работает: SELECT '(13.0843, 80.2805)'::POINT

...