He golpeado un gran bache de velocidad al insertar datos en mi base de datos. Puede ver en el siguiente código que simplemente estoy construyendo la declaración SQL para pasar al comando de ejecución. Los valores son correctos y todo está bien allí, pero el intérprete de Python parece agregar y eliminar citas de los params en tiempo de ejecución.INSERT INTO y Concatenación de cadenas con Python
Esta es la forma correcta de insertar datos espaciales en la base de datos.
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));
Esto es verificable en el editor de Postgres consulta ... Ahora, cuando ejecuto el código Python a continuación Se añade comillas dobles alrededor de la función ST_GeomFromText y luego elimina las citas de la columna 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)");
Esto hace que la inserción fallar y PostGIS afirma que no es una geometría adecuada. Cuando imprimo cada uno de los params para ver en la pantalla, no hay nada divertido pasando con las comillas, así que estoy pensando que el problema debe estar en el comando de ejecución. Estoy usando Python 2.7 ... ¿Alguien puede ayudar a prevenir que esta locura continúe?
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()
Intenté cur.execute (SQL, (Data,)) pero eso saca el índice de tupla fuera de rango. ¿Nadie? – aeupinhere