代码之家  ›  专栏  ›  技术社区  ›  Batman

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

  •  0
  • Batman  · 技术社区  · 7 年前

    我想做的是创建一个 QuerySet 所有的物体 匹配最终列表。然后检查需要创建、更新和删除哪些模型对象。然后(理想情况下)以最少的事务数执行更新。并且不执行任何不必要的DB操作。

    使用 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 回复  |  直到 7 年前
        1
  •  1
  •   ruddra    7 年前

    你应该使用 Redis 储存和使用 this

    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)
    
    推荐文章