我有一个Django项目,其中多个进程正在访问后端mysql数据库.一个过程是创建记录,而另一个过程是尝试读取这些记录.我有一个问题,在我手动调用connection._commit()之前,尝试读取记录的第二个进程实际上找不到记录.
之前已经问过这个问题: 在Django中使用MySQLdb缓存MySQL响应中的问题
OP表示他解决了这个问题,但没有解释如何解决.任何人都可以对此有所了解吗?我希望能够在不手动调用_commit()的情况下访问记录.
谢谢,
阿西夫
他说:
Django的自动提交不是数据库中的实际自动提交.
因此,您必须确保在数据库级别设置自动提交.否则,由于事务隔离,在完成提交之前,进程不会看到由不同进程(不同连接)所做的更改.AFAIK这不是特别的Django问题,除了关于Django autocommit的文档缺乏清晰度!= db autocommit.
更新:从MySQL文档稍微解释:
REPEATABLE READ是InnoDB的默认隔离级别.对于一致性读取,与READ COMMITTED隔离级别存在重要差异:同一事务中的所有一致性读取读取第一次读取建立的快照.(我的重点.)
因此,使用REPEATABLE READ,您只能在后续读取时获得第一次读取时读取的内容.使用READ COMMITTED,每次读取都会创建并读取自己的新快照,以便您可以看到其他事务的后续更新.所以 - 在回答您的评论时 - 您对交易级别的更改是正确的.
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |