python - Django 模型没有将数据实时保存到数据库

标签 python mysql django

我正在使用 Django Python 框架和 MySQL DBMS。

在下面的屏幕截图中,我使用 SurveyDraft.objects.create() 创建 new_survey_draft 对象,如图所示,假设它应该在surveydraft 数据库表,但也如屏幕截图所示,在调试我的代码后,使用 id=pk=270 创建了 new_survey_draft 对象> ,而右侧另一个窗口中显示的数据库表没有带有 id=270 的新行。

即使在对象实例化后调用的 publish_survey_draft() 中设置断点,我也调用了 SurveyDraft.objects.get(pk=270) ,它返回了对象,但数据库表中仍然没有 id=270

最后,在恢复代码并从所有定义返回后,该行已成功添加到带有 id=270 的数据库表中。

我想知道所看到的背后发生了什么,Django是否有可能将数据存储在对象中而不实时持久化到数据库,而仅在稍后的执行点上将数据全部持久化?

我已经被困在这个问题上几个小时了,在网上找不到任何有用的东西,所以我非常感谢任何有关这个问题的建议。

enter image description here

最佳答案

深入研究这个问题后,我发现有一个名为原子请求的概念,通过将ATOMIC_REQUESTS设置为True在我的Django项目中启用 在 DATABASES 字典下的 settings.py 中,如所解释的 here

It works like this. Before calling a view function, Django starts a transaction. If the response is produced without problems, Django commits the transaction. If the view produces an exception, Django rolls back the transaction.

这就是为什么在使用断点调试代码时更改不会保留在数据库中,因为只有在返回成功响应后,更改才会提交到数据库。

关于python - Django 模型没有将数据实时保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908465/

相关文章:

Python 将非数字字符串存储为数字

python - 仅将 SymPy 中的 doit() 函数应用于表达式的外部

mysql - 从当前状态查询获取总计数

mysql - 圆相交MySQL

html - 在 Django 中使用时不显示字体

javascript - Greasemonkey POST 请求总是返回 400 错误

python - Django 管理列表过滤器删除所有选项

python - Python如何按降序排列每个字母的出现频率?

python - 使用 Google App Engine Python 的最佳工具

php - 屏蔽图像 URL 并使其看起来像在您的网络服务器上