2016-12-01 78 views
0

我正在使用Django Python框架和MySQL DBMS。Django模型不是实时向数据库持久保存数据

在下面的截图中,我创建使用SurveyDraft.objects.create()如图所示new_survey_draft对象,假设它应该建立在surveydraft数据库表中的新行,但作为也显示在屏幕截图中,并且在调试我的代码后,new_survey_draft对象创建为id = pk = 270,而在右边的其他窗口中显示的数据库表没有id = 270

publish_survey_draft设定断点即使当()中的对象实例化后称为,我称为SurveyDraft.objects.get(PK = 270),其返回的对象,但仍有不ID在数据库表中为270

最后,在恢复代码并从所有定义中返回后,该行已成功添加到DB表中,其中id = 270

我在想,看到背后发生了什么,是否有可能Django将数据存储在对象中,而不需要实时保存到数据库,并且只在稍后的某个执行点上将数据全部保留在一起?

我一直被困在这个小时,并找不到任何有用的在线,所以我真的很感激任何关于这个问题的建议。

enter image description here

+1

这只是交易,当然。 –

+0

@DanielRoseman你是什么意思?你能澄清吗? –

+0

我发现我自己的“交易”意味着你的意思,下面是我的答案。如果你更多地解释了这个概念而不是你上面的评论,并且对我的问题投下了赞成票,那将会更有帮助和赞赏。 @DanielRoseman但无论如何感谢。 –

回答

0

深挖这个问题后,我才发现,有一个叫原子概念3.请这是一个在我的Django项目通过在settings.py设置ATOMIC_REQUESTS为True启用根据DATABASES词典解释here

它的工作原理是这样的。在调用视图函数之前,Django启动一个 事务。如果响应没有问题产生,Django 提交事务。如果视图产生异常,Django 回滚事务。

这就是为什么在使用断点调试我的代码时,这些更改不会持久存在于数据库中,因为一旦成功响应返回,更改将只提交给DB。