You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何将API数据保存至Model并实现数据更新?

解决Django节点数据保存与更新问题

第一步:修正模型,添加唯一约束

每个节点名称(node字段)应是唯一标识,先给模型的node字段加上unique=True,确保数据库不会出现重复节点记录,同时作为后续更新的匹配依据:

class Node(models.Model):
    node = models.CharField(max_length=2000, null=True, blank=True, unique=True)
    cpu = models.FloatField(null=True, blank=True)
    # 内存以字节数返回,用BigIntegerField比FloatField更合适,避免精度损耗
    mem = models.BigIntegerField(null=True, blank=True)
    status = models.CharField(max_length=2000, null=True, blank=True)

修改后执行迁移命令更新数据库:

python manage.py makemigrations
python manage.py migrate

第二步:用update_or_create实现批量保存与更新

Django内置的update_or_create方法可同时处理「新节点创建」和「旧节点更新」逻辑:它会根据指定条件查找记录,存在则更新字段值,不存在则创建新记录。替换你原来的循环代码:

for node_data in r:
    Node.objects.update_or_create(
        # 以node名称作为唯一匹配条件
        node=node_data['node'],
        # 需要更新或初始化的字段集合
        defaults={
            'cpu': node_data['cpu'],
            'mem': node_data['mem'],
            'status': node_data['status']
        }
    )

排查之前仅保存最后一条的原因

你之前的代码只留存最后一条记录,大概率是以下两种情况之一:

  • 先打印r确认API返回的是否为包含3条数据的完整列表,有可能你的API请求逻辑存在问题,仅获取到了最后一条数据
  • 无唯一约束时,可能重复创建了多条同名节点记录,但查询时因排序问题只显示最后一条,update_or_create可彻底避免该问题

内容的提问来源于stack exchange,提问作者Matija Terzić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:55:21