访问Django db后端的多个进程;记录直到手动调用_commit才显示

时间:2009-07-10 00:16:36

标签: mysql django

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

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

OP说他解决了这个问题,但没有解释如何。任何人都可以对此有所了解吗?我希望能够在不手动调用_commit()的情况下访问记录。

谢谢,

阿西

2 个答案:

答案 0 :(得分:5)

他说:

  

Django的自动提交不是数据库中的实际自动提交。

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

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

  

REPEATABLE READ是默认值   InnoDB的隔离级别。对于   一致的读,有一个   与READ的重要区别   委托隔离级别:全部   一致的读取内容   事务读取快照   由第一次阅读建立。 (我   的强调。)

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

答案 1 :(得分:0)

您是否将流程作为视图运行?如果是这样,它们可能在请求完成处理时提交,但听起来您正在同时运行这些进程。如果在视图外部运行该进程,则应在每次保存时提交。