Django中模型记录的有效批量更新

时间:2018-11-06 04:29:06

标签: django django-models

我正在构建一个Django应用,该应用将定期从外部来源获取信息,并使用它来更新模型对象。

我想做的是创建一个QuerySet,其中包含所有可能与最终列表匹配的对象。然后检查哪些模型对象需要创建,更新和删除。然后(理想情况下)以最少的事务数执行更新。并且无需执行任何不必要的数据库操作。

使用create_or_update可让我大部分时间去做自己想做的事。

jobs = get_current_jobs(host, user)

for host, user, name, defaults in jobs:
    obj, _ = Job.upate_or_create(host=host, user=user, name=name, defaults=defaults)

此方法的问题在于它不会删除不再存在的任何内容。

我可以删除所有内容,或者做一些愚蠢的事情

to_delete = set(Job.objects.filter(host=host, user=user)) - set(current)

(这是一个选择),但我觉得必须已经有了一个优雅的解决方案,不需要删除所有内容或将所有内容读取到内存中。

1 个答案:

答案 0 :(得分:1)

您应该使用Redis进行存储,并在代码中使用this python软件包。例如:

import redis
import requests

pool = redis.StrictRedis('localhost')
time_in_seconds = 3600 # the time period you want to keep your data
response = requests.get("url_to_ext_source")
pool.set("api_response", response.json(), ex=time_in_seconds)