django数据导入(单条导入与批量导入)
数据导入在终端导入有时候有些不方便,我们在最外面那个django_demo目录下写一个脚本,叫 txt2db.py,把 course.txt 也放在django_demo下:course.txt文件:单条导入与批量导入:#!/usr/bin/python# -*- coding: UTF-8 -*-"""@author:ZSW@file:txt2db.py@time:2020/10/10"""im
·
数据导入
在终端导入有时候有些不方便,我们在最外面那个django_demo目录下写一个脚本,叫 txt2db.py,把 course.txt 也放在django_demo下:
course.txt文件:
单条导入与批量导入:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:ZSW
@file:txt2db.py
@time:2020/10/10
"""
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_demo.settings")
'''
Django 版本大于等于1.7的时候,需要加上下面两句
import django
django.setup()
否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
'''
import django
if django.VERSION >= (1, 7): # 自动判断版本
django.setup()
# 单条导入方法1(推荐)
def add_data():
from django_demo.models import CourseModel
CourseModel.objects.create(cour_id=11, course='java', grade='95')
# 单条导入方法2
def add_data1():
from django_demo.models import CourseModel
test1 = CourseModel(cour_id=1, course='python', grade='96')
test1.save()
# 单条导入方法3
def add_data2():
from django_demo.models import CourseModel
test2 = CourseModel()
test2.cour_id = "22"
test2.course = "php"
test2.grade = '92'
test2.save()
# 多条批量导入方法一
#CourseModel.objects.create()每保存一条执行一次SQL
def bulk_add1():
from django_demo.models import CourseModel, StudentInformationModel, StudentModel
with open('course.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
line = line.strip()
cour_id, course, grade = line.split(',')
CourseModel.objects.create(cour_id=cour_id, course=course, grade=grade)
# 批量导入方法二 bulk_create()(推荐)
#CourseModel.objects.bulk_create()是执行一条SQL存入多条数据,会快很多
def bulk_add2():
from django_demo.models import CourseModel
data_list = []
with open('course.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
line = line.strip()
cour_id, course, grade = line.split(',')
course = CourseModel(cour_id=cour_id, course=course, grade=grade)
data_list.append(course)
CourseModel.objects.bulk_create(data_list)
# 批量导入方法三 bulk_create()(推荐)
#相比较于方法二,方法三用列表解析代替 for 循环会更快
def bulk_add3():
from django_demo.models import CourseModel
data_list = []
with open('course.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
line = line.strip()
parts = line.split(',')
course = CourseModel(cour_id=parts[0], course=parts[1], grade=parts[2])
data_list.append(course)
"""
# 以上五行 也可以用 列表解析 写成下面这样
# data_list = [CourseModel(cour_id=line.split(',')[0], course=line.split(',')[1]),
grade=line.split(',')[2]) for line in lines]
"""
CourseModel.objects.bulk_create(data_list)
if __name__ == "__main__":
# add_data()
# add_data1()
# add_data2()
# bulk_add1()
bulk_add2()
# bulk_add3()
print('Done!')
导入的数据如下:
导入数据重复解决办法:
如果你导入数据过多,导入时出错了,或者你手动停止了,导入了一部分,还有一部分没有导入。或者你再次运行上面的命令,你会发现数据重复了,怎么办呢?
django.db.models 中还有一个函数叫 get_or_create() 有就获取过来,没有就创建,用它可以避免重复,但是速度可以会慢些,因为要先尝试获取,看看有没有
只要把上面的:
CourseModel.objects.create(cour_id=cour_id, course=course, grade=grade)
改为:
CourseModel.objects.get_or_create(cour_id=cour_id, course=course, grade=grade)
即可避免导入重复数据。
参考链接:https://code.ziqiangxuetang.com/django/django-import-data.html
更多推荐
已为社区贡献8条内容
所有评论(0)