1. 关于锁 1.1 乐观锁 乐观锁的出发点是,同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景,用以提高吞吐量. 实现方式,读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段是否和第一次读取一致.如果一致,则更新数据,否则拒绝更新,重新读取后再提交. 1.2 悲观锁 悲观锁的出发点是,当一条数据正在被修改时,不允许其他任何关于这条数据的操作. 实现方式,读取一个字段之后,加锁,不允许其他任何读.写操作.执行处理逻辑,更新数据完毕后,释放锁. 1.3 比较 乐观锁的开销远低…
上一篇我们说了,如何在Django中进行事务操作,数据的原子性操作 涉及了事务操作,我们不得不考虑的另一个问题就是:并发操作 还是那个用户转账的操作 我们使用事务操作解决的操作中途服务器宕机问题 但是,如果有两条请求同时修改一条记录该怎么办? 我们可以使用select_for_update函数 select_for_update使用的是悲观锁 使用select_for_update内部执行的sql语句就是select...for update 具体用法: models.UserInfo.obje…
代码示例: 使用 select for update 数据库查询 select ... for update 是数据库层面上专门用来解决并发取数据后再修改的场景的,主流的关系数据库 比如mysql.postgresql都支持这个功能, 新版的Django ORM甚至直接提供了这个功能的shortcut . 关于它的更多介绍,你可以搜索你使用的数据库的介绍文档. 使用 select for update 后,我们的代码可能会变成这样: 复制代码 代码如下: from django.db impor…
直接上图 在项目中直接找到settings 文件 第一步       原始Django自带数据库 第二步将配置改成MySQL的数据 第三步  在__init__文件中告知Django使用MySQL数据库 第四步   连接MySQL 第五步  填写添加数据库必须填写的内容 然后就连上了数据库…
http://blog.chinaunix.net/uid-16728139-id-4364343.html …
信号 Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到. 简单来说,信号允许特定的sender通知一组receiver某些操作已经发生. 这在多处代码和同一事件有关联的情况下很有用. 内置信号 模型信号 django.db.models.signals模块定义了模型系统发送的一组信号. pre_init django.db.models.signals.pre_init每当您实例化Django模型时,该信号都会在模型的__init__()方法的开头发送.…
起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 pip install django-celery 这个命令使用的依赖是 Celery 3.x 的版本,所以会把我之前安装的 4.x 卸载,不过对功能上并没有什么影响.我们也完全可以仅用Celery在django中使用,但使用 django-celery 模块能更好的管理 celery. 使用 可以把有关 C…
Django 中使用数据库的 9 个小技巧. 1. 过滤器聚合 在 Django 2.0 之前,如果你想得到“用户总数”.“活跃用户总数”等信息时,你不得不使用条件表达式. Django 2.0 中,通过在聚合函数中添加一个过滤器使这种问题变得更加简单.容易处理: 怎么样? 看起来很简洁明了吧. 如果你使用的是 PostgreSQL 的话,若要进行这种查询,查询程序如下: 可以看到,在第二个查询语句中,使用 FILTER(WHERE) 过滤语句. 2. 将查询结果变为 namedtuples 形…
一.ORM(对象关系映射) 很多语言的web框架中都有这个概念 1. 为什么要有ORM? 1. 写程序离不开数据,要使用数据就需要连接数据库,但是不同的数据库在sql语句上(mysql,oracle等)会有点区别, 因此直接在你的项目中使用sql语句的话,不便于以后的修改,万一更换了数据库,那所有sql语句不就要重新写吗? 所以这个时候ORM就体现出优点了,你只需要写ORM的代码,它就会根据你连接的数据库自动帮你翻译成对应的sql语句, 也就是说无论你使用的是mysql还是oracle,ORM操…
在Django中,如果一个项目涉及了金融,他的要求是十分严格的. 所以嘞,这里就有一些坑,很多坑,第一次开发的时候很容易出现一系列的错误 在涉及金融计算的地方,不能使用float类型 什么鬼,但事实就是如此,千万不要用float进行计算..... 所以,Python中为我们提供了一个专门的模块计算,decimal 而同样的,Django中也提供了相应的计算字段,DecimalField class DecimalField(max_digits=None, decimal_places=None…