【问题标题】:How to save new Django database entries to JSON?如何将新的 Django 数据库条目保存到 JSON?
【发布时间】:2019-08-13 19:23:22
【问题描述】:

我的 Django 应用程序的 git 存储库包括几个 .tsv 文件,其中包含用于填充我的应用程序数据库的初始条目。在应用设置期间,这些项目被导入应用的 SQLite 数据库。 SQLite 数据库不存储在应用程序的 git 存储库中。

在正常使用应用程序期间,我计划使用管理面板向数据库添加更多项目。但是,我还希望将这些条目保存为应用程序存储库中的固定装置。我在想一个 JSON 文件可能是这个目的的理想选择,因为它是基于文本的,因此可以与 git 版本控制一起使用。然后这些文件将成为应用程序的更多固定装置,这些固定装置将在初始配置时导入。

如何配置我的应用,以便在我向管理面板添加新条目时,该条目的副本也会保存在 JSON 文件中?

我知道您可以使用manage.py dumpdata 命令将整个数据库转储为 JSON,但我不想要 整个 数据库,我只想要特定数据库表的新条目的 JSON/楷模。

我在想我可以尝试破解模型上的 save 方法来尝试将项目的 JSON 表示写入文件,但我不确定这是否理想。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 我相信您正在寻找每次创建或更新的特定数据库条目。您是否查看过转储数据选项,您可以在其中指定应用程序名称和模型名称,以便仅为这些特定模型获取 JSON 转储。您只能选择您更新的模型并为此获取 JSON。这是 Django Docs 中的链接 - dumpdata

标签: json django database git sqlite


【解决方案1】:

不建议为可能出错或可能需要更多时间的事情覆盖save 方法。当更改简单且重要时,您通常会覆盖 save

您可以使用信号,但在您的情况下,它的工作量太大。您可以改为编写一个函数来为您执行此操作,但在将数据保存到数据库之后仍然不能完全正确。您可以立即执行此操作,但过程太多,除非更新您的文件非常重要。

我建议使用 celery 之类的东西在后台运行一个与所有 django 函数分开的函数。例如,您可以在每次数据更新或每小时调用它并编辑备份文件。您甚至可以创建一个表来监控更新过程。

哪种解决方案最好取决于您以及数据的重要性。请记住,编辑文件也可能是一个繁重的过程,因此像每天一样创建备份可能是一个更好的主意。

【讨论】:

  • 谢谢,我正在研究 Celery。但是,我不确定如何在每次数据更新时调用任务。那还需要在模型的save 方法中添加任务吗?
  • 您可以使用信号代替。通常尽量不要覆盖save 方法,除非你必须这样做。
猜你喜欢
  • 2021-02-22
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2012-04-05
  • 2019-05-05
  • 1970-01-01
  • 2013-04-06
  • 2021-05-26
相关资源
最近更新 更多