首页 > 解决方案 > KeyError: 'rows' 在尝试获取 couchdb 中的视图内容时

问题描述

我开始制作一个 couchdb 数据库,但不幸的是我发现了一个让我停滞不前的错误。

我在数据库中有一些这样的文件:

{
  "_id": "001169c8-16a9-400b-831d-61f4134e1cd3",
  "_rev": "2-c95e7385f0ad6a249906a8a2e60341de",
  "type": "word",
  "word": "quién",
  "creation-date": "2020-12-19T19:54:06.954539",
  "sentences": {
    "00789ff2-e38e-414b-a3f5-c2282aeeb42e": {
      "sentence": "No sé       quién se lo ha metido por la cabeza, dice que le pongo en ridículo       si no voy",
      "source": "foundation",
      "date": "2020-12-19T19:47:48.114888"
    },
    "01b40374-1103-4fd5-95dd-fd5d8eddbd21": {
      "sentence": "— Y a vuestra merced, ¿quién le fía, señor cura",
      "source": "foundation",
      "date": "2020-12-19T19:43:10.510990"
    }
  }
}

我设计了一个视图来仅恢复这些文档的“单词”部分:

function (doc) {
  if( doc.type == 'word')
  emit(doc.word, 1);
}

最后,在 python 中,我创建了一个简单的脚本来恢复该视图中的文档:

def processEntries( db : couchdb.Database ):
    for row in db.iterview( '_design/all_words', 100, group=True ) :
        print( f"{row=}")

但不幸的是,我收到了这个错误(只显示最后几行):

  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py", line 1041, in iterview
    rows = list(self.view(name, wrapper, **options))
  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py", line 1361, in __len__
    return len(self.rows)
  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py", line 1378, in rows
    self._fetch()
  File "/home/rluna/wkcpp/lib/corpus_env/lib/python3.8/site-packages/couchdb/client.py", line 1366, in _fetch
    self._rows = [wrapper(row) for row in data['rows']]
KeyError: 'rows'

有什么想法吗?

标签: pythoncouchdbpyton-couchdb

解决方案


发现了问题。首先,group=True对于这种情况是不正确的,因为我根本不想对结果进行分组。

其次,问题在于必须调用视图的方式。视图位于设计文档中,因此要唯一标识视图,您必须提供设计文档的名称视图文档。换句话说,必须以这种方式更改 python 代码:

def processEntries( db : couchdb.Database ):
    for row in db.iterview( 'all_words/all_words', 100 ) :
        print( f"{row=}")

推荐阅读