Qual é a maneira mais simples de gravar dados no CartoDB usando Python?


8

Estou tentando escrever uma função em Python que usará a API CartoDB para gravar dados em uma das minhas tabelas. Alguém tem um exemplo simples que mostra como fazer isso que eu possa usar para começar?

Respostas:


6

Escrever dados através da API é bastante simples. Aqui está o mais básico,

Suponha que já temos duas variáveis, como você as obtém depende de você,
username = 'cartodb-user-name'
apikey = 'MY-CARTODB-API-KEY'
Em seguida, vamos criar uma instrução INSERT para usar
insert = "INSERT INTO my_table_name (the_geom, measure) VALUES (CDB_LatLng(43, -120), 22.0)"
Crie o ponto de extremidade do URL para a API da nossa conta
url = "https://%s.cartodb.com/api/v1/sql" % username
Crie um objeto contendo os parâmetros de nossa solicitação
params = {
    'api_key' : apikey, # our account apikey, don't share!
    'q'       : insert  # our insert statement above
}
Envie a solicitação usando urllib2
req = urllib2.Request(url, urllib.urlencode(params))
response = urllib2.urlopen(req)

CONFIGURAÇÃO: Você deve ter algumas bibliotecas importadas no seu script python

import urllib
import urllib2

BÔNUS: As inserções de lote são muito melhores que as inserções de linha única.

Aqui está um exemplo de uma estratégia de inserção de várias linhas (3). Eu uso uma matriz para armazenar inicialmente todos os meus valores de linha. Cada valor da linha é uma lista delimitada por vírgulas, entre parênteses e armazenada na 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)

Usando isso, agrupei todas as 3 linhas em uma única httpsolicitação. Ele funciona mais rápido e é altamente recomendado. Por experiência pessoal, 100-250 linhas por vez funcionam muito bem.


1
O comentário de @ mapbaker abaixo também é verdadeiro! i poderia ter trocado um monte de presente para a biblioteca cartodb, só percebi que eu iria cru neste caso
andrewxhill


2

Aqui está um exemplo de script que escrevi há algum tempo. Ele basicamente implementa o que andrewxhill escreveu acima, mas usa a biblioteca "orders" em vez de urllib.

Ele agrupa inserções em lotes para fazer 1000 por vez e, em seguida, usa a API para fazer as inserções.

lasbbox2cartodb.py

O script faz um loop em um conjunto de arquivos Lidar em subdiretórios e insere as caixas delimitadoras dos arquivos lidar no CartoDB.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.