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

如何使用Django获取JSON API数据并存入Car模型?

从JSON API导入汽车数据到Django的Car模型

先确认Car模型结构

确保models.py中的Car模型包含name和model字段,示例如下:

from django.db import models

class Car(models.Model):
    name = models.CharField(max_length=100)
    model = models.CharField(max_length=100)

    def __str__(self):
        return f"{self.name} {self.model}"

步骤1:安装依赖

需要用requests库请求API,执行以下命令安装:

pip install requests

方法一:快速脚本导入

在项目根目录创建import_cars.py,写入以下代码(替换你的项目和应用名称、API地址):

import requests
import django
import os

# 配置Django环境变量
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "你的项目名称.settings")
django.setup()

from 你的应用名称.models import Car

def import_cars(api_url):
    try:
        # 请求API数据
        resp = requests.get(api_url)
        resp.raise_for_status()  # 捕获HTTP错误
        cars_list = resp.json()

        # 遍历数据,用get_or_create避免重复创建
        for car_data in cars_list:
            Car.objects.get_or_create(
                name=car_data["name"],
                model=car_data["model"]
            )

        print(f"成功处理{len(cars_list)}条汽车数据")
    except requests.exceptions.RequestException as e:
        print(f"API请求失败: {str(e)}")
    except KeyError as e:
        print(f"API数据格式错误,缺失字段: {str(e)}")

if __name__ == "__main__":
    # 替换为你的API地址
    import_cars("https://your-api-endpoint.com/cars")

运行脚本:

python import_cars.py

方法二:Django自定义命令(推荐)

这种方式更符合Django项目规范,支持通过manage.py调用:

  1. 在你的应用目录下创建management/commands文件夹(需包含空的__init__.py文件)
  2. 在commands文件夹中新建import_cars.py,写入:
from django.core.management.base import BaseCommand
import requests
from 你的应用名称.models import Car

class Command(BaseCommand):
    help = "从指定JSON API导入汽车数据到Car模型"

    def add_arguments(self, parser):
        # 添加API URL作为命令参数
        parser.add_argument('api_url', type=str, help='汽车数据API的完整URL')

    def handle(self, *args, **options):
        api_url = options['api_url']
        try:
            resp = requests.get(api_url)
            resp.raise_for_status()
            cars_list = resp.json()

            created = 0
            updated = 0

            for car_data in cars_list:
                obj, is_created = Car.objects.get_or_create(
                    name=car_data["name"],
                    model=car_data["model"]
                )
                if is_created:
                    created += 1
                else:
                    updated += 1

            self.stdout.write(self.style.SUCCESS(f"导入完成!新增{created}条,更新{updated}条数据"))
        except requests.exceptions.RequestException as e:
            self.stderr.write(self.style.ERROR(f"API请求失败: {str(e)}"))
        except KeyError as e:
            self.stderr.write(self.style.ERROR(f"数据格式错误,缺失字段: {str(e)}"))
  1. 运行命令(替换为你的API地址):
python manage.py import_cars https://your-api-endpoint.com/cars

大数据量优化

如果API返回的数据量很大,建议用bulk_create批量插入提升效率,替换导入逻辑如下:

# 获取已有汽车的名称+型号组合,避免重复
existing_cars = Car.objects.values_list('name', 'model')
existing_pairs = set((car[0], car[1]) for car in existing_cars)

new_car_objs = []
for car_data in cars_list:
    pair = (car_data["name"], car_data["model"])
    if pair not in existing_pairs:
        new_car_objs.append(Car(name=car_data["name"], model=car_data["model"]))

if new_car_objs:
    Car.objects.bulk_create(new_car_objs)
    print(f"批量新增{len(new_car_objs)}条数据")

内容的提问来源于stack exchange,提问作者Mazen Mamdouh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:35:11