RavenDB Python客户端是否存在UseOptimisticConcurrency选项?
RavenDB Python客户端乐观并发功能说明
- 首先明确:RavenDB Python客户端默认开启乐观并发,不需要手动设置类似
.Advanced.UseOptimisticConcurrency的显式开关。 - 实现逻辑:当你通过session加载文档时,客户端会自动捕获文档的
@etag标识;在执行save_changes()更新/删除操作时,会将该etag发送至服务器。服务器会对比当前文档的etag值,若不匹配则抛出ConcurrencyException,以此实现并发冲突检测。
代码示例
from ravendb import DocumentStore, ConcurrencyException # 初始化文档存储 with DocumentStore(urls=["http://localhost:8080"], database="DemoDB") as store: store.initialize() # 开启会话 with store.open_session() as session: # 加载文档,自动记录etag target_doc = session.load("products/1") target_doc["price"] = 99.9 try: # 保存变更,触发etag校验 session.save_changes() except ConcurrencyException: # 处理并发冲突场景 print("该文档已被其他进程修改,请重试")
- 若需临时关闭特定文档的乐观并发校验(仅特殊场景使用),可调用
session.advanced.ignore_etag(doc)方法,这样更新时服务器会跳过etag对比:
# 加载文档后,忽略其etag校验 session.advanced.ignore_etag(target_doc)
- 关于文档缺失的问题:目前RavenDB官方文档对Python客户端的覆盖确实不足,建议直接查看客户端源码(如
session.py、advanced_session_operations.py文件)来确认功能细节,后续可关注官方文档的更新。
内容的提问来源于stack exchange,提问作者devilx85
相关产品推荐
相关产品推荐

