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'}
    }
}

你可能感兴趣的:(django 多线程mysql脏行)