我有一个数据库,我想截断所有记录,我知道可以只为每个文档添加一个_deleted键,或者在CouchDB-python库上调用db.delete()。我正在使用couchdb-python的delete
但是当我获取所有文档然后在除了设计文档之外的每个文档上调用.delete时它似乎不起作用。
这是我的代码。
docs = get_db().view('_all_docs', include_docs=True)
for i in docs:
if not(i['id'].startswith('_')):
get_db().delete(i)
这是错误。因为_all_docs
的结果是返回id
而不是_id
。
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\couchdb\client.py", line 625, in delete
if doc['_id'] is None:
KeyError: '_id'
我的问题是如何获取所有返回_id
而不仅仅是id
的文档?或者有什么方法可以解决这个问题?
答案 0 :(得分:0)
答案 1 :(得分:0)
在couchdb-python
中,view
查询会返回couchdb.client.Row
个对象的列表,而不是文档列表。您需要将属性doc
传递给delete
,即get_db().delete(i['doc'])
。
但从性能角度来看,最好使用bulk api。使用couchdb-python
时,它看起来应该是这样的:
rows = get_db().view('_all_docs', include_docs=True)
docs = []
for row in rows:
if row['id'].startswith('_'):
continue
doc = row['doc']
doc['_deleted'] = True
docs.append(doc)
get_db().update(docs)