Apa cara paling sederhana untuk menulis data ke CartoDB menggunakan Python?

8

Saya mencoba menulis fungsi dengan Python yang akan menggunakan API CartoDB untuk menulis data ke salah satu tabel saya. Adakah yang punya contoh sederhana yang menunjukkan cara melakukan ini yang bisa saya gunakan untuk memulai?

pengguna29912
sumber

Jawaban:

6

Menulis data melalui API sangat sederhana. Inilah yang paling mendasar,

Misalkan kita sudah memiliki dua variabel, bagaimana Anda mendapatkannya terserah Anda,
username = 'cartodb-user-name'
apikey = 'MY-CARTODB-API-KEY'
Selanjutnya, mari kita buat pernyataan INSERT untuk digunakan
insert = "INSERT INTO my_table_name (the_geom, measure) VALUES (CDB_LatLng(43, -120), 22.0)"
Buat titik akhir URL untuk API akun kami
url = "https://%s.cartodb.com/api/v1/sql" % username
Buat objek yang berisi parameter permintaan kami
params = {
    'api_key' : apikey, # our account apikey, don't share!
    'q'       : insert  # our insert statement above
}
Kirim permintaan menggunakan urllib2
req = urllib2.Request(url, urllib.urlencode(params))
response = urllib2.urlopen(req)

SETUP: Anda harus memiliki beberapa perpustakaan yang diimpor dalam skrip python Anda

import urllib
import urllib2

BONUS: Sisipan batch jauh lebih baik daripada sisipan baris tunggal.

Berikut adalah contoh strategi penyisipan multi-baris (3). Saya menggunakan array untuk awalnya menyimpan semua nilai baris saya. Setiap nilai baris adalah daftar yang dibatasi koma, dibungkus dengan tanda kurung dan disimpan ke array,

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)

Dengan menggunakan ini, saya telah membungkus semua 3 baris menjadi satu httppermintaan. Ini bekerja lebih cepat di sekitar dan sangat dianjurkan. Dari pengalaman pribadi 100-250 baris sekaligus bekerja dengan sangat baik.

andrewxhill
sumber
1
Komentar @ mapbaker di bawah ini juga benar! saya bisa bertukar banyak ini untuk perpustakaan cartodb, baru saja saya pikir saya akan mentah dalam kasus ini
andrewxhill
5

Ada pustaka python untuk CartoDB ... Saya pikir ini akan bekerja dengan SQL API .

DPSSpatial
sumber
2

Berikut ini contoh skrip yang saya tulis beberapa waktu lalu. Pada dasarnya mengimplementasikan apa yang ditulis andrewxhill di atas, tetapi menggunakan pustaka "permintaan" alih-alih urllib.

Ini mengumpulkan secara bersamaan sisipan untuk melakukan 1000 sekaligus, kemudian menggunakan API untuk melakukan sisipan.

lasbbox2cartodb.py

Script loop lebih dari satu set file Lidar di subdirektori, dan menyisipkan kotak pembatas untuk file lidar ke CartoDB.

orang bodoh
sumber