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
"""

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

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Steven灬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值