Estoy tratando de escribir una función en Python que usará la API de CartoDB para escribir datos en una de mis tablas. ¿Alguien tiene un ejemplo simple que muestre cómo hacer esto que pueda usar para comenzar?
8
Escribir datos a través de la API es bastante simple. Aquí está lo más básico,
Supongamos que ya tenemos dos variables, cómo las obtiene depende de usted,username = 'cartodb-user-name'
apikey = 'MY-CARTODB-API-KEY'
A continuación, creemos una instrucción INSERT para usar
insert = "INSERT INTO my_table_name (the_geom, measure) VALUES (CDB_LatLng(43, -120), 22.0)"
Cree el punto final de URL para nuestra API de cuenta
url = "https://%s.cartodb.com/api/v1/sql" % username
Crear un objeto que contenga los parámetros de nuestra solicitud.
params = {
'api_key' : apikey, # our account apikey, don't share!
'q' : insert # our insert statement above
}
Enviar la solicitud usando urllib2
req = urllib2.Request(url, urllib.urlencode(params))
response = urllib2.urlopen(req)
import urllib
import urllib2
Aquí hay un ejemplo de una estrategia de inserción de varias filas (3). Utilizo una matriz para almacenar inicialmente todos mis valores de fila. Cada valor de fila es una lista delimitada por comas, entre paréntesis y almacenada en la matriz,
rows = [
"(CDB_LatLng(10, 10), 1.0)",
"(CDB_LatLng(20, 12), 1.4)",
"(CDB_LatLng(30, 14), 1.2)"
]
insert = "INSERT INTO my_table_name (the_geom, measure) (VALUES %s)" % ','.join(rows)
Con esto, he envuelto las 3 filas en una sola http
solicitud. Funciona más rápido y es muy recomendable. Por experiencia personal, 100-250 filas a la vez funciona muy bien.
Hay una biblioteca de Python para CartoDB ... Creo que funcionaría con la API de SQL .
fuente
Aquí hay un script de ejemplo que escribí hace un tiempo. Básicamente implementa lo que andrewxhill escribió anteriormente, pero usa la biblioteca de "solicitudes" en lugar de urllib.
Agrupa las inserciones para hacer 1000 a la vez, luego usa la API para hacer las inserciones.
lasbbox2cartodb.py
El script recorre un conjunto de archivos Lidar en subdirectorios e inserta los cuadros delimitadores para los archivos lidar en CartoDB.
fuente