zoukankan      html  css  js  c++  java
  • 批量插入数据

    批量插入数据

    当我们想要批量得向数据库插入数据的时候,该怎么做?按照之前的思想,应该会有以下代码。在Django中需要向数据库中插入多条数据(list)。使用如下方法,每次save()的时候都会访问一次数据库。导致性能问题:

    def index(request):
        # 1.往书籍表中插入数据 1000
        for i in range(1000):  # 这种插入方式 效率极低
            models.Book.objects.create(title='第%s本书'%i)
    

    没事,也就走了大概一千次数据库吧。耗时长的不得了,所以要如何才能优化这个代码呢?

    看下面代码

    在Django中需要向数据库中插入多条数据(list)。使用如下方法,每次save()的时候都会访问一次数据库。导致性能问题:

    def index(request):
        book_list = []
        for i in range(100000):
            book_list.append(models.Book(title='第%s本书'%i))
        models.Book.objects.bulk_create(book_list)
        book_queryset = models.Book.objects.all()
    

    bulk_create()是执行一条SQL存入多条数据

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

    如果你导入数据过多,导入时出错了,或者你手动停止了,导入了一部分,还有一部分没有导入。或者你再次运行上面的命令,你会发现数据重复了,怎么办呢?

    django.db.models 中还有一个函数叫 get_or_create(),之前文章中也提到过,有就获取过来,没有就创建,用它可以避免重复,但是速度可以会慢些,因为要先尝试获取,看看有没有

    只要把上面的:

    Book.objects.create(title=title,content=content)
    

    换成下面的就不会重复导入数据了

    Book.objects.get_or_create(title=title,content=content)
    

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

  • 相关阅读:
    C#3.0实现变异赋值(Mutantic Assignment)
    博客园积分算法探讨
    C#动静结合编程之二: 两种哲学
    REST构架风格介绍之二:CRUD
    C# vs C++之一:委托 vs 函数指针
    REST构架风格介绍之一:状态表述转移
    C#动静结合编程之三:Duck Typing
    C#动静结合编程之四:泛型委托
    C# vs C++之二:GC vs RAII
    Ecshop文章分类列表页如何自定义Title以提高SEO效果
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11761449.html
Copyright © 2011-2022 走看看