2011-10-18 56 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)