django 多线程mysql脏行

同一个项目下俩个线程,操作Model后,得到的数据不同。
场景:用户付款后保存付款状态到数据库,把单号通过websocket发给客户端,客户端确认订单后通过websocket返回单号和状态,此时在处理回传的单号时,抛出单号不存在。
原因:自己在ECS上搭建的数据库服务,默认的隔离级别为REPEATABLE-READ,修改为READ COMMITTED即可,也可以在django的settings中设置此选项而不用更改mysql配置文件:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        ...
        'OPTIONS':{'init_command': 'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED'}
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容