我正在使用 couchdbkit (python 2.7),我需要一次批量保存大约 100 个新项目。我想同时保存有效负载(=附件)和元数据(=doc)。
现在我一个一个地保存这些项目的效率非常低,因为 couchdbkit 只允许put_attachment()
在数据库中已经存在一个文档之后。这迫使我执行非常缓慢。当我想保存 1 个项目时,我需要按固定顺序进行两次沟通:首先save()
是项目,其次是put_attachment()
。
我想要的是在本地创建所有文档_attachments
并立即发送所有内容。以下代码不起作用,因为bulk_save
不处理附件[编辑:不正确,请参阅我的回答]
def setInBulk(self, key2value):
datetimeprop = DateTimeProperty()
def createItemToSave(thekey, thevalue):
pickled = cPickle.dumps(obj = value, protocol = 2).decode('latin1')
item = {"_id": key, "content": {"seeattachment": True, "ispickled" : True}, "creationtm": datetimeprop.to_json(datetime.datetime.utcnow()), "lastaccesstm": datetimeprop.to_json(datetime.datetime.utcnow())}
item ["_attachments"] = {
"theattachment":
{
"content_type":"application/octet-stream",
"data": pickled.encode('utf-8')
}
}
return item
docs = []
for key, value in key2value.iteritems():
docs.append(createItemToSave(key, value))
#this is what I want but it seems not to work
self.db.bulk_save(docs, all_or_nothing = True)
如何规避 couchdbkit 强加给我的一次只写一个限制?