gpt4 book ai didi

mysql - 多个进程访问 Django 数据库后端;直到手动调用 _commit 才显示记录

转载 作者:可可西里 更新时间:2023-11-01 07:05:49 24 4
gpt4 key购买 nike

我有一个 Django 项目,其中多个进程正在访问后端 mysql 数据库。一个进程正在创建记录,而第二个进程正在尝试读取这些记录。我遇到一个问题,在我手动调用 connection._commit() 之前,尝试读取记录的第二个进程实际上无法找到记录。

这个问题之前有人问过: caching issues in MySQL response with MySQLdb in Django

OP 说他解决了这个问题,但没有完全解释是如何解决的。任何人都可以阐明这一点吗?我希望无需手动调用 _commit() 即可访问记录。

谢谢,

阿西夫

最佳答案

他说:

Django's autocommit isn't an actual autocommit in the db.

因此,您必须确保在数据库级别设置了自动提交。否则,由于事务隔离,进程将看不到不同进程(不同连接)所做的更改,直到完成提交。据我所知,这并不是 Django 的特别问题,除了文档中关于 Django autocommit != db autocommit 缺乏清晰度之外。

更新:从 MySQL 文档中稍微解释一下:

REPEATABLE READ is the default isolation level for InnoDB. For consistent reads, there is an important difference from the READ COMMITTED isolation level: All consistent reads within the same transaction read the snapshot established by the first read. (My emphasis.)

因此,使用 REPEATABLE READ,您只能在后续读取中获得第一次读取中读取的内容。使用 READ COMMITTED,每次读取都会创建并读取自己的新快照,这样您就可以看到来自其他事务的后续更新。因此 - 在回答您的评论时 - 您对交易级别的更改是正确的。

关于mysql - 多个进程访问 Django 数据库后端;直到手动调用 _commit 才显示记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com