0

我一直在尝试使用日期键检索 couchdb 文档,格式为: yyyy mm dd.

我希望能够使用 couchdb-python 中的视图检索一系列日期。我可以使用 curl 让它工作。例如:

curl -X GET mylocation:5984/small/_design/Common/_view/date?startkey='"2012%2006%2004"'\&endkey='"2012%2006%2006"'

但是,在 Python 中使用 view 方法,例如

a=ui.db.view(docname, startkey='"2012%2006%2004"', endkey='"2012%2006%2006"')
a.rows

什么都不生产。我试过了:

  1. 单独使用 startkey --works

  2. 单独的 Endkey - 不起作用。

  3. 将键更改为以下形式的复合键:“yy”、“mm”、“dd”

然后尝试按如下方式检索它们:

a=ui.db.view(docname, startkey='\["12","06","04"\]', endkey='\["12","06","06"\]')
a.rows

同样, startkey 本身有效,不使用 endkey 有效。这在 curl 中也可以正常工作,例如:

curl -X GET mylocation:5984/small/_design/Common/_view/date?startkey='\["12","06","04"\]'&endkey='\["12","06","06"\]'

然后,我将键更改为整数而不是字符串——同样,使用 startkey 的任何东西都可以使用,使用 endkey 的任何东西都不起作用。

我终于将密钥更改为仅整数 1-->10,但仍然无法让 endkey 做任何事情。

我正在使用 couchdb-python 0.8 版。我正在 eric4 内部调试这个(这可能是问题吗?)

4

1 回答 1

0

您不需要在视图调用中将 startkey/endkey 查询参数显式编码为 JSON。默认情况下,CouchDB 要求它们具有有效的 JSON 值。例如,如果您的视图以 ["yy", "mm", "dd"] 形式返回复合键,那么您的视图请求将是下一个

a = ui.db.view(docname, startkey=["12","06","04"], endkey=["12","06","06"])

请注意,startkey 和 endkey 具有列表类型值 - 与您的视图功能键相同。

关于 curl 请求:它不等同于您的 db.view() 请求:单引号充当 shell 字符串转义,但它们不会随请求一起传递。所以 curl 对 CouchDB 的实际请求是

mylocation:5984/small/_design/Common/_view/date?startkey=["12","06","04"]&endkey=["12","06","06"]

除非你会有 invalid_json 错误响应,因为 JSON 字符串应该用双引号引起来。

无论如何,您可以查看 CouchDB 日志(信息级别对于您的情况来说已经足够了)来比较您的 Python 程序和 curl 对 CouchDB 的实际请求 - 它们对于您的情况会有所不同。

于 2012-09-07T14:25:19.283 回答