zoukankan      html  css  js  c++  java
  • Django08-批量创建数据

    通过views.py文件中创建

    第1种方法
    循环创建数据, 这种方法不推荐,因为每一次循环都会连接一次数据库,效率较慢

    def user_list(request):
        user_all = models.User.objects.all()
        for i in range(302):
            models.User.objects.create(username='user-%s'%(i))
        return render(request, 'user/user_list.html', {'user_all': user_all})        

    第2种方法
    先创建一个空列表,将循环的对象加入到空列表中,再一次性在数据库中创建,效率高

    要使用bulk_create方法进行批量创建

    def user_list(request):
        user_all = models.User.objects.all()
            user_list = []
            for i in range(302):
                 obj = models.User(username='user-%s'%(i),pwd='123',gender=0, depart=models.Depart.objects.filter(pk='1').first())
                 user_list.append(obj)
            models.User.objects.bulk_create(user_list, batch_size=100)   #batch_size可以理解为批处理参数,控制每一次批量添加数据的数量
        return render(request, 'user/user_list.html', {'user_all': user_all})

    也可以使用列表解析替代for循环会更快

    user_list = [models.User(username='user-%s'%(i),pwd='123',gender=0, depart=models.Depart.objects.filter(pk='1').first()) for i in range(302)]
    models.User.objects.bulk_create(user_list, batch_size=100)    

    第3种方法
    批量导入时数据重复的解决方法

    如果导入数据过多,导入时出错了,或者你手动停止了,导入了一部分,还有一部分没有导入。或者你再次运行上面的命令,你会发现数据重复了,怎么办呢?
    django.db.models中还有一个函数叫get_or_create(),有就获取过来,没有就创建,用它可以避免重复,但是速度可以会慢些,因为要先尝试获取,看看有没有

    只要把bulk_create换成get_or_create就不会重复导入数据了

    models.User.objects.get_or_create(user_list, batch_size=100) 

    返回值是(BlogObject, True/False)新建时返回 True, 已经存在时返回 False。

  • 相关阅读:
    查看数据表的信息
    HR面试必问:你什么时候能到岗?聪明人都这样回答
    42种常见的HTTP响应代码
    Ubuntu环境下微信界面中间显示黑框和字体显示为白框等问题
    C# 开发电子印章制作工具 -- 附下载程序
    ofd文件拆分合并思路探索 -- 附下载程序
    利用防火墙出站规则解决Adobe Rader XI闪退问题
    记一次 Aximp.exe工具的使用
    MacOS Monterey 一键重置系统
    macbook m1 键盘进灰导致个别按键不灵敏解决方法
  • 原文地址:https://www.cnblogs.com/dxnui119/p/10714409.html
Copyright © 2011-2022 走看看