4

这可能有一个明显的答案,但我似乎无法在任何地方找到它:查询存储在 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

4 回答 4

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)
于 2014-06-26T14:17:37.870 回答
1

Cloudant 禁止临时视图的原因是它们无法扩展。您将需要创建一个包含已定义视图的设计文档。这是一个链接,指向一个设计文档,上面定义了视图:

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

我不确定如何在 couchdb.py 中执行此操作,但您可能想尝试不同的 python 库。这是有关在 couchquery 中创建视图的部分的链接

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

于 2011-10-18T17:34:43.770 回答
1

只是注意到 Cloudant 现在有一个官方的 Python 库,https://github.com/cloudant/python-cloudant

于 2017-10-19T20:38:34.700 回答
0

您可能应该使用couchdbkit。它使设置视图变得容易。我认为您不能再在 Cloudant 中使用临时视图。

于 2013-04-17T16:03:25.343 回答