python - 使用来自 API Get 请求的数据填充 Django 数据库

标签 python django get-request

我的项目是围绕发出 API 请求(获取 JSON)和从这些请求输出信息而构建的。 60-80% 的请求请求的是很少更改的静态数据。我想将此静态数据存储在数据库中,这样我就不必将所有请求都花在该静态数据上。

我已经建立了一个模型,它将保存来自其中一个请求的所有信息。我不知道在哪里放置任何代码,以便使用我的请求中的信息实际填写该数据库。

型号

 class Champion(models.Model):
     id = models.IntegerField(primary_key=True)
     name = models.CharField(max_length=100)
     title = models.CharField(max_length=255)
     image = models.CharField(max_length=5000)
     ...

基本上我知道我需要发出 2 个请求,一个请求获取我的所有 ID,然后遍历这些 ID 并发出一个将在数据库中创建冠军的请求。我已经为此编写了代码,只是不知道将此代码放在哪里或如何访问它。

最佳答案

换句话说 - 你有一些远程 API 和本地 django 支持的站点。您不想在每个请求中从远程 API 获取数据,因此您希望将其存储在本地。在这种情况下,您需要将您的数据与远程数据同步,问题是:如何开始同步。

您有一些可能性,但首先您应该考虑何时需要运行同步:

  • 每天/每小时/每周/每月?
  • 手动/应要求?
  • 何时更改数据(远程 API 上的某些方法,检查最后修改)?

如果你想在数据发生变化时或者一段时间后进行同步,你还需要回答一个问题:你的同步应该如何影响请求?在请求期间处理同步是否可以,或者如果在同步期间调用的请求仍然返回旧数据是否可以?

如果您决定按要求同步它 - 您可以简单地将同步代码放在 custom management command 中或进入将运行同步的单独 View (仅限授权访问)。

如果可以在正常请求期间进行同步,您可以检查每个请求是否距离上次同步的时间超过 X,远程 API 上的数据是否已更新或是否满足其他条件,并在返回响应之前运行同步( 注意竞争条件!)。

如果您不想在请求期间执行此操作(并且在同步发生时发出的请求仍然返回旧数据也没关系),您可以使用 celery 或系统 cron 作业。

Celery 可以按需运行任务(例如在请求中,当您检查远程数据是否已更改时,您可以运行异步任务以进行同步并根据旧数据返回响应)或定期运行任务(如 cron职位)。对于普通的 cron 任务,您可以只使用自定义管理命令,如上所述。

关于python - 使用来自 API Get 请求的数据填充 Django 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139777/

相关文章:

django - 在 django/python 中人性化,如何翻译

php - 如何使用 Guzzlehttp/guzzle 6 发送 Cookie?

python - 函数参数的异常处理

Python IO错误: [Errno 2] from recursive directory call

python - 在executeScript NIFI python中使用FlowFile属性

python - django 管理员 : how to make a readonly url field clickable in change_form. html?

python - 使用 Django 以编程方式检查站点是在本地运行还是在服务器上运行的最佳方法?

python - 有没有办法查看 python 包的所有版本?

arduino - 使用 NodeMCU ESP8266 发送 GET 请求

python - 将 GET 请求中的 URL 发送到 Google App Engine 上的 Python 服务器