django的离线乐观锁定

django-optimistic-lock的Python项目详细描述


https://secure.travis-ci.org/gavinwahl/django-optimistic-lock.png?branch=master

为django模型实现脱机乐观锁[1]

用法

添加一个VersionField并从VersionedMixin继承。

fromoolimportVersionField,VersionedMixinclassMyModel(VersionedMixin,models.Model):version=VersionField()

每当保存MyModel时,将检查版本以确保 实例自上次获取以来没有更改。如果有 冲突,将引发ConcurrentUpdate异常。

实施

VersionField只是一个整数,它每 保存其模型的时间。VersionedMixin重写_do_update (由save调用以实际执行更新)添加额外的 更新查询的条件-数据库中的版本是 与模型的版本相同。如果匹配,就没有 同时修改。如果它们不匹配,update语句将 不更新任何行,我们知道有人先保存了。

这样生成的sql看起来像:

UPDATE mymodel SET version = version + 1, ... WHERE id = %s AND version = %s

当没有更新行时,我们知道有人赢了,我们需要提高 一个ConcurrentUpdate

django-concurrency

比较

django-concurrency之前 版本0.7使用SELECT FOR UPDATE来实现版本检查。我 希望避免数据库级锁定,因此django-optimistic-lock添加 更新语句的版本筛选器,如martin fowler[1]所述。

此外,ool采用了比 通过只做一件事(乐观锁定)来实现django并发性 没有任何猴子补丁,中间件,设置变量,管理 类或窗体字段。django并发可能更有意义 如果你想找一些东西来适应 开箱即用。如果您只是想要一个简单的模型,请使用ool 实现并需要处理ui和周围的架构 你自己。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像