如何在python couchdb中获得过滤的更改

2024-09-30 18:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pythoncouchdb库使用连续提要来监听数据库中的更改。我想应用一个过滤器,它只给那些键read等于true的文档。在

得到正常的HTTP请求结果。但我不知道如何通过couchdb-python库来实现这一点。下面是我编写的自定义过滤器:

def read_true_filter():
    return """function(doc, req) {
            if(doc.read === true) {
                return true;
            }
            return false;
        }
        """

以下是我如何倾听这些变化:

^{pr2}$

但这给了我一个错误:

Traceback (most recent call last):
  File "../src/couch_pull_pipeline.py", line 87, in <module>
    db_changes = db.changes(
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/client.py", line 1027, in _changes
    _, _, data = self.resource.get('_changes', **opts)
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/http.py", line 546, in get
    return self._request('GET', path, headers=headers, **params)
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/http.py", line 581, in _request
    credentials=self.credentials)
  File "/Users/sanyam/venv/lib/python3.5/site-packages/couchdb/http.py", line 421, in request
    raise ServerError((status, error))
couchdb.http.ServerError: (400, ('bad_request', 'filter parameter must be of the form `designname/filtername`'))

在请求中添加designname很简单,但我找不到与使用couchdb客户机相同的方法。在

是否可以使用python库,或者我应该使用简单的HTTP请求,或者更好的想法是在couchdb服务器本身上设置过滤器?(根据我目前所读到的,由于性能原因,在couchdb中使用该过滤器不是一个好主意。)

有人能告诉我我做错了什么/该怎么做吗?在


Tags: inpytrue过滤器returnvenvlibpackages
1条回答
网友
1楼 · 发布于 2024-09-30 18:18:05

我想出来了。我在数据库中制作了一个设计文档,我想在其中筛选内容,例如:

{
   "_id": "_design/read_validator",
   "_rev": "1-bd5fb337899a0eaf485b2112b439cc30",
   "filters": {
       "read_only_true": "function(doc, req) {if(doc.read === true) {return true;}return false;}"
   }
}

这里read_validator是设计文档,它包含返回docs的过滤器,它的read属性设置为true。在couchdb python客户机中,在获取连续提要时,我将过滤器资源路径作为字符串design_document_name/filter_name,其中design_document是在数据库中创建的设计文档的名称(在本例中是read_validator),而{}是过滤器的名称(在本例中是read_only_true)。所以,联系是这样的:

^{pr2}$

这里的db_changes将是一个连续的提要生成器,通过该生成器,所有的文档都可以通过迭代获取,这些文档的read键等于true。在

相关问题 更多 >