使用Python查询Cloudant
这个问题可能有个显而易见的答案,但我到处找也没找到:在Cloudant服务器上查询存储的CouchDB数据库的最佳方法是什么?我试着按照couchdb.py的说明使用临时视图:
>>> 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中使用!有没有简单的方法可以解决这个问题?
4 个回答
1
我想提醒大家,Cloudant现在有了一个官方的Python库,大家可以在这里找到:https://github.com/cloudant/python-cloudant。
3
这是我用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)
1
Cloudant 不允许使用临时视图的原因是因为它们无法扩展。你需要创建一个设计文档,并在里面定义好视图。这里有一个链接,可以看看设计文档是什么样的,以及里面是如何定义视图的:
http://max.ic.ht/_utils/document.html?action/_design/action
我不太确定在 couchdb.py 中怎么做,但你可以试试其他的 Python 库。这里有一个链接,介绍了如何在 couchquery 中创建视图: