Was ist der einfachste Weg, um Daten mit Python in CartoDB zu schreiben?


8

Ich versuche, eine Funktion in Python zu schreiben, die die CartoDB-API verwendet, um Daten in eine meiner Tabellen zu schreiben. Hat jemand ein einfaches Beispiel, das zeigt, wie das geht, mit dem ich anfangen kann?

Antworten:


6

Das Schreiben von Daten über die API ist ziemlich einfach. Hier ist das grundlegendste,

Angenommen, wir haben bereits zwei Variablen. Wie Sie sie erhalten, liegt bei Ihnen.
username = 'cartodb-user-name'
apikey = 'MY-CARTODB-API-KEY'
Als Nächstes erstellen wir eine zu verwendende INSERT-Anweisung
insert = "INSERT INTO my_table_name (the_geom, measure) VALUES (CDB_LatLng(43, -120), 22.0)"
Erstellen Sie den URL-Endpunkt für unsere Konto-API
url = "https://%s.cartodb.com/api/v1/sql" % username
Erstellen Sie ein Objekt, das die Parameter unserer Anfrage enthält
params = {
    'api_key' : apikey, # our account apikey, don't share!
    'q'       : insert  # our insert statement above
}
Senden Sie die Anfrage mit urllib2
req = urllib2.Request(url, urllib.urlencode(params))
response = urllib2.urlopen(req)

SETUP: Sie sollten einige Bibliotheken in Ihr Python-Skript importieren lassen

import urllib
import urllib2

BONUS: Batch-Inserts sind viel besser als einzeilige Inserts.

Hier ist ein Beispiel für eine mehrzeilige (3) Einfügestrategie. Ich verwende ein Array, um zunächst alle meine Zeilenwerte zu speichern. Jeder Zeilenwert ist eine durch Kommas getrennte Liste, die in Klammern eingeschlossen und im Array gespeichert ist.

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)

Damit habe ich alle 3 Zeilen in eine einzige httpAnfrage eingeschlossen. Es funktioniert rundum schneller und ist sehr zu empfehlen. Aus persönlicher Erfahrung funktionieren 100-250 Zeilen gleichzeitig sehr gut.


1
@ mapbakers Kommentar unten ist auch wahr! Ich hätte ein paar davon gegen die Cartodb-Bibliothek austauschen können, dachte nur, ich würde in diesem Fall roh werden
andrewxhill


2

Hier ist ein Beispielskript, das ich vor einiger Zeit geschrieben habe. Es implementiert im Grunde das, was andrewxhill oben geschrieben hat, verwendet jedoch die Bibliothek "request" anstelle von urllib.

Es stapelt Einfügungen zu 1000 gleichzeitig und verwendet dann die API, um die Einfügungen durchzuführen.

lasbbox2cartodb.py

Das Skript durchläuft eine Reihe von Lidar-Dateien in Unterverzeichnissen und fügt die Begrenzungsrahmen für die Lidar-Dateien in CartoDB ein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.