Cách đơn giản nhất để ghi dữ liệu vào CartoDB bằng Python là gì?


8

Tôi đang cố gắng viết một hàm trong Python sẽ sử dụng API CartoDB để ghi dữ liệu vào một trong các bảng của tôi. Có ai có một ví dụ đơn giản chỉ ra cách làm điều này mà tôi có thể sử dụng để bắt đầu không?

Câu trả lời:


6

Viết dữ liệu thông qua API khá đơn giản. Đây là cơ bản nhất,

Giả sử chúng ta đã có hai biến số, làm thế nào bạn có được chúng là tùy thuộc vào bạn,
username = 'cartodb-user-name'
apikey = 'MY-CARTODB-API-KEY'
Tiếp theo, hãy tạo một câu lệnh INSERT để sử dụng
insert = "INSERT INTO my_table_name (the_geom, measure) VALUES (CDB_LatLng(43, -120), 22.0)"
Tạo điểm cuối URL cho API tài khoản của chúng tôi
url = "https://%s.cartodb.com/api/v1/sql" % username
Tạo một đối tượng chứa các tham số của yêu cầu của chúng tôi
params = {
    'api_key' : apikey, # our account apikey, don't share!
    'q'       : insert  # our insert statement above
}
Gửi yêu cầu bằng urllib2
req = urllib2.Request(url, urllib.urlencode(params))
response = urllib2.urlopen(req)

CÀI ĐẶT: Bạn nên nhập một vài thư viện trong tập lệnh python của bạn

import urllib
import urllib2

THƯỞNG: Chèn hàng loạt là tốt hơn so với chèn dòng đơn.

Dưới đây là một ví dụ về chiến lược chèn nhiều hàng (3). Tôi sử dụng một mảng để ban đầu lưu trữ tất cả các giá trị hàng của tôi. Mỗi giá trị hàng là một danh sách được phân cách bằng dấu phẩy, được gói trong ngoặc đơn và được lưu trữ vào mảng,

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)

Sử dụng điều này, tôi đã gói cả 3 hàng vào một httpyêu cầu. Nó hoạt động nhanh hơn tất cả xung quanh và rất khuyến khích. Từ kinh nghiệm cá nhân 100-250 hàng tại một thời điểm hoạt động thực sự tốt.


1
@ bình luận của mapbaker dưới đây cũng đúng! tôi có thể đã trao đổi một loạt thứ này cho thư viện cartodb, chỉ cần hình dung tôi sẽ sống trong trường hợp này
andrewxhill


2

Đây là một kịch bản ví dụ mà tôi đã viết một lúc trước. Về cơ bản, nó thực hiện những gì andrewxhill đã viết ở trên, nhưng sử dụng thư viện "request" thay vì urllib.

Nó kết hợp các nhóm với nhau để thực hiện 1000 lần, sau đó sử dụng API để thực hiện các thao tác chèn.

lasbbox2cartodb.py

Tập lệnh lặp lại một tập hợp các tập tin Lidar trong các thư mục con và chèn các hộp giới hạn cho các tập tin tập tin vào CartoDB.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.