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?
8
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)
import urllib
import urllib2
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 http
solicitação. Ele funciona mais rápido e é altamente recomendado. Por experiência pessoal, 100-250 linhas por vez funcionam muito bem.
Existe uma biblioteca python para o CartoDB ... acho que funcionaria com a API do SQL .
fonte
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.
fonte