我有一个 python 程序可以访问 couchDB 数据库、创建新文档并更新现有文档。 对于给定的数据库 db 和文档 Doc,我尽量在每次修改前小心并重新加载文档:
somedoc = Doc.load(db,id)
更新之前
doc.store(db)
据我所知,这不是必需的,因为每次调用存储时都应该更新 doc.rev。但是...我收到冲突消息:
couchdb.http.ResourceConflict: (u'conflict', u'Document update conflict.')
是否有任何方法可以强制不更新和警告消息,而不是在这些冲突时出现 fatal error 。或者,更好的是,是否有某种方法可以快速检查文档修订号 - 数据库正在被两个都更新的脚本访问,但两者都小心加载每个文档,快速进行修改并在尽可能短的时间内更新数据库以尽量减少冲突的可能性....
干杯
最佳答案
我仍然没有弄清楚资源冲突的来源,因为在存储文档之前我检查修订是否正确:
latestRev = CouchDoc.load(db,doc.id)
if latestRev.rev != doc.rev:
print 'revision mismatch ' + doc.rev + '\t' + revs.rev
else:
doc.store(db)
但是,有一个简单的方法可以解决导致 fatal error 的冲突(python 新手,所以之前没有想到这样做):
try:
doc.store(db)
except couchdb.http.ResourceConflict:
latestDoc = ConflictDoc.load(db,doc.id)
当 couchDB 抛出 ResourceConflict 时,这确实需要在再次存储之前重做 try 命令之前对文档的任何更新。
关于python couchdb 版本冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796775/