2011-10-18 96 views
4

對此有一個明顯的答案,但我似乎無法在任何地方找到它:查詢存儲在cloudant服務器上的couchdb數據庫的最佳方法是什麼?我嘗試使用臨時視圖,一拉couchdb.py說明:用python查詢cloudant

>>> db['johndoe'] = dict(type='Person', name='John Doe') 
>>> db['maryjane'] = dict(type='Person', name='Mary Jane') 
>>> db['gotham'] = dict(type='City', name='Gotham City') 
>>> map_fun = '''function(doc) { 
...  if (doc.type == 'Person') 
...   emit(doc.name, null); 
... }''' 
>>> for row in db.query(map_fun): 
...  print row.key 
John Doe 
Mary Jane 

雖然這個工程上本地託管的數據庫,有CloudAnt它返回錯誤:

couchdb.http.ServerError: (403, ('forbidden', 'temp views are disabled on Cloudant')) 

我讀過cloudant教程在查詢中,但提出的查詢語法似乎很笨拙,而且如何將其應用到Python中並不明顯!有沒有簡單的方法呢?

回答

1

Cloudant禁止臨時視圖的原因是因爲它們不能縮放。您需要創建一個包含定義視圖的設計文檔。這裏是一個鏈接到一個設計文件是什麼樣子與它定義的視圖:

http://max.ic.ht/_utils/document.html?action/_design/action

我不知道怎麼做,在couchdb.py,但你可能想嘗試不同的Python庫。這裏是couchquery

http://mikeal.github.com/couchquery/#creating-views

+0

確定,所以我現在可以創建視圖併爲此使用設計文檔....下一步是解決如何在couchdb-python的ListField中發送特定值的視圖請求。 – radpotato

+3

我建議使用普通的HTTP庫,如請求。 –

0

的部分鏈接有關創建視圖你或許應該使用couchdbkit。它使設置視圖變得容易。我認爲你不能在Cloudant中使用臨時視圖。

2

這就是我用python添加記錄的方法。

import requests 
import json 

doc = { 
    'username':'kerrie', 
    'high_score':550, 
    'level':3 
} 

auth = ('username', 'password') 
headers = {'Content-type': 'application/json'} 

post_url = "https://account.cloudant.com/database/kerrie".format(auth[0]) 

r = requests.put(post_url, auth=auth, headers=headers, data=json.dumps(doc)) 
print json.dumps(r.json(), indent=1) 

這是我如何在Python中查詢10條記錄。

import requests 
import json 
auth = ('username', 'password') 
get_url = "https://account.cloudant.com/database/_all_docs?limit=10".format(auth[0]) 
r = requests.get(get_url, auth=auth) 
print json.dumps(r.json(), indent=1)