¿Cuál es la forma más simple de escribir datos en CartoDB usando Python?

8

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?

usuario29912
fuente

Respuestas:

6

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)

CONFIGURACIÓN: debe tener un par de bibliotecas importadas en su script de Python

import urllib
import urllib2

BONIFICACIÓN: las inserciones por lotes son mucho mejores que las inserciones de una sola línea.

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 httpsolicitud. Funciona más rápido y es muy recomendable. Por experiencia personal, 100-250 filas a la vez funciona muy bien.

andrewxhill
fuente
1
¡El comentario de @ mapbaker a continuación también es cierto! podría haber cambiado un montón de esto por la biblioteca cartodb, solo pensé que me volvería
loco
2

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.

stuporglue
fuente