如何将CSV文件数据批量导入Django SQLite数据库及配置报错处理
你的实现思路是正确的,核心逻辑(读取CSV字段映射到Django模型后存入数据库)本身没有问题,报错仅因为你直接运行独立Python脚本时没有初始化Django运行环境,系统无法读取项目配置、加载模型。
报错原因
你引入的Staff模型属于Django ORM的组件,依赖Django的全局配置(包括INSTALLED_APPS、数据库连接配置等)才能正常工作,直接运行独立脚本时Django没有加载对应配置,因此抛出配置异常。
解决方案
有两种常用的解决方式:
方式一(推荐):使用Django自定义命令实现导入
这种方式不需要手动处理配置加载,完全符合Django的开发规范:
- 在你的
staff应用目录下,创建层级目录management/commands,并在两个子目录中都新增空的__init__.py文件,让Django可以识别自定义命令 - 在
commands目录下新建import_staff.py文件,写入如下代码:
import csv from django.core.management.base import BaseCommand from staff.models import Staff class Command(BaseCommand): help = '从users.csv导入员工数据到Staff表' def handle(self, *args, **options): with open('users.csv') as csv_file: csv_reader = csv.DictReader(csv_file, delimiter=',') staff_list = [] for row in csv_reader: staff_list.append(Staff( firstname=row['firstname'], lastname=row['lastname'], email=row['email'] )) # 批量插入,效率远高于循环save Staff.objects.bulk_create(staff_list) self.stdout.write(self.style.SUCCESS(f'成功导入{len(staff_list)}条员工数据'))
- 回到Django项目根目录,运行命令
python manage.py import_staff即可完成导入。
方式二:给独立脚本手动添加Django环境初始化
如果你坚持用原来的独立脚本运行,只需要在脚本最开头添加Django环境初始化代码即可,修改后的完整代码如下:
import os import django import csv # 请将下面的your_project_name替换为你自己的Django项目名称 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings') django.setup() from staff.models import Staff with open('users.csv') as csv_file: csv_reader = csv.DictReader(csv_file, delimiter=',') staff_list = [] for row in csv_reader: staff_list.append(Staff( firstname=row['firstname'], lastname=row['lastname'], email=row['email'] )) Staff.objects.bulk_create(staff_list) # 注意:with语法会自动关闭文件,不需要额外调用csv_file.close()
直接运行修改后的脚本即可正常导入数据。
内容的提问来源于stack exchange,提问作者a298b112
相关产品推荐
相关产品推荐

