同一个项目下俩个线程,操作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'}
}
}
网友评论