我已经在插入数据到我的数据库打一个大减速。你可以从下面的代码中看到,我只是构建了要传递给execute命令的SQL语句。值是正确的,一切都很好,但python解释器似乎在运行时添加和删除引号。INSERT INTO和字符串连接与Python
这是到数据库中插入空间数据的正确方法。
INSERT INTO my_table(
name, url, id, point_geom, poly_geom)
VALUES ('test', 'http://myurl', '26971012',
ST_GeomFromText('POINT(52.147400 19.050780)',4326),
ST_GeomFromText('POLYGON((52.146542 19.050557, bleh, bleh, bleh))',4326));
这是Postgres的查询编辑器可验证......现在,当我运行Python代码低于它增加了双引号的ST_GeomFromText功能,然后删除ID列的报价。
INSERT INTO my_table(
name, url, id, point_geom, poly_geom)
VALUES ('test', 'http://myurl', 26971012,
"ST_GeomFromText('POINT(52.147400 19.050780)',4326)",
"ST_GeomFromText('POLYGON((52.146542 19.050557, 52.148430 19.045527, 52.149525 19.045831, 52.147400 19.050780, 52.147400 19.050780, 52.146542 19.050557))',4326)");
这会导致插入失败,并且PostGIS声称它不是合适的几何体。当我在屏幕上打印每一个参数时,引用并没有什么好笑的,所以我认为问题必须在执行命令中。我正在使用Python 2.7 ...任何人都可以借助如何防止这种疯狂继续吗?
conn = psycopg2.connect('dbname=mydb user=postgres password=password')
cur = conn.cursor()
SQL = 'INSERT INTO my_table (name, url, id, point_geom, poly_geom) VALUES (%s,%s,%s,%s,%s);'
Data = name, url, id, point, polygon
#print Data
cur.execute(SQL, Data)
conn.commit()
cur.close()
conn.close()
我试图cur.execute(SQL,(数据)),但将引发元组索引超出范围。任何人? – aeupinhere 2011-05-24 22:46:06