Pythonを使用してCartoDBにデータを書き込む最も簡単な方法は何ですか?


8

CartoDB APIを使用してテーブルの1つにデータを書き込む関数をPythonで記述しようとしています。開始するために使用できる、これを行う方法を示す簡単な例がありますか?

回答:


6

APIを介したデータの書き込みは非常に簡単です。ここが最も基本的です

すでに2つの変数があるとします。それらをどのように取得するかはあなた次第です。
username = 'cartodb-user-name'
apikey = 'MY-CARTODB-API-KEY'
次に、使用するINSERTステートメントを作成しましょう
insert = "INSERT INTO my_table_name (the_geom, measure) VALUES (CDB_LatLng(43, -120), 22.0)"
アカウントAPIのURLエンドポイントを作成します
url = "https://%s.cartodb.com/api/v1/sql" % username
リクエストのパラメータを含むオブジェクトを作成します
params = {
    'api_key' : apikey, # our account apikey, don't share!
    'q'       : insert  # our insert statement above
}
urllib2を使用してリクエストを送信します
req = urllib2.Request(url, urllib.urlencode(params))
response = urllib2.urlopen(req)

セットアップ:Pythonスクリプトにインポートされたいくつかのライブラリが必要です

import urllib
import urllib2

ボーナス:バッチ挿入は、単一行挿入よりもはるかに優れています。

これは、複数行(3)挿入戦略の例です。配列を使用して、最初にすべての行の値を格納します。各行の値は、コンマで区切られたリストであり、括弧で囲まれて配列に格納されます。

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)

これを使用して、3つの行すべてを1つのhttp要求にラップしました。全体的に高速に動作するため、強くお勧めします。個人的な経験から、一度に100〜250行は非常にうまく機能します。


1
以下の@mapbakerのコメントも当てはまります。私はこれの多くをcartodbライブラリに交換できたかもしれませんが、この場合は生になると思いました
andrewxhill


2

これは私がしばらく前に書いたスクリプトの例です。それは基本的にandrewxhillが上に書いたものを実装しますが、urllibの代わりに "requests"ライブラリを使用します。

挿入をバッチ処理して一度に1000回実行し、APIを使用して挿入を実行します。

lasbbox2cartodb.py

スクリプトは、サブディレクトリ内の一連のLidarファイルをループし、Lidarファイルの境界ボックスをCartoDBに挿入します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.