【发布时间】:2018-01-19 08:25:42
【问题描述】:
我想在 Python 中使用 psycopg2 模块做一个 INSERT 运算符。
代码是:
cursor.execute('INSERT INTO tb_places (id_street, geom, number, name, first_year, source, id_user, date) VALUES
(22, ST_GeomFromText("POINT(-518.944 -2698.2069)", 4326), 34, TEST_1, 1950, Almanak96, 6, 2017-08-01)')
当我使用连接来生成 INSERT 字符串时,它可以工作,但是我知道这是一个坏主意。所以我正在尝试使用其他替代方法来避免 SQL 注入。
我试过了:
cursor.execute('INSERT INTO tb_places (id_street, geom, number, name, first_year, source, id_user, date) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)',
[22, "ST_GeomFromText('POINT(-518.944 -2698.2069)', 4326)", 34, 'TEST_1', 1931, 'Almanak96', 6, '2017-08-01'])
但我收到此错误:
psycopg2.InternalError: parse error - invalid geometry
LINE 1: ...e, first_year, source, id_user, date) VALUES (22, 'ST_GeomFr...
^
HINT: "ST" <-- parse error at position 2 within geometry
基本上问题是当我想插入一些东西时,我无法在字符串中传递 SQL 函数。
有人知道我能做什么吗?
【问题讨论】:
-
第一个查询是如何工作的?向我们展示未填充值的串联版本。
ST_GeomFromText()是什么?那是 Python 还是 Postgres 方法?即使是 Postgres,Python 也会出错,因为无法找到该函数。
标签: python sql postgresql postgis psycopg2