Django大量挿入データの実現方法
プロジェクトの需要:ブラウザでdjangoバックエンドのあるurlにアクセスします。book/)は、リアルタイムでデータベースに1000個のデータを生成し、生成したデータを検索して、フロントエンドページに表示します。
view.py
bulk_クリアーの方法
views.pyのもとのビュー関数を少し変えます。
bulk_create方法はdjango ormがわざわざ提供してくれた便利な大量操作データベースの方式で、効率がとても高いです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
view.py
from django.shortcuts import render, HttpResponse, redirect
from app01 import models
def get_book(request):
# for 1000
for i in range(1000):
models.Book.objects.create(name=' %s '%i)
book_queryset = models.Book.objects.all() #
return render(request,'get_book.html',locals()) # html
urls.py
from django.conf.urls import url
from app01 import views
urlpatterns = [
url(r'^get_book/',views.get_book)
]
models.py
from django.db import models
class get_book(models.Model):
title = models.CharField(max_length=64)
ゲットするbook.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}" rel="external nofollow" >
<link rel="stylesheet" href="{% static 'dist/sweetalert.css' %}" rel="external nofollow" >
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
<script src="{% static 'dist/sweetalert.min.js' %}"></script>
</head>
<body>
{% for book_obj in book_queryset %}
<p>{{ book_obj.title }}</p>
{% endfor %}
</body>
</html>
上記のコードの書き込みが完了したらdjangoバックエンドを起動します。ブラウザを訪問すると、ブラウザは明らかな待ち時間があります。これはバックエンドが止まらない操作データベースにあるため、時間がかかります。しばらく待ってから、挿入したばかりの1000本のデータが正常に見えます。このようにデータベースを操作するのは効率が低いのは明らかです。データベースを大量に操作する方法がありますか?答えは肯定です。bulk_クリアーの方法
views.pyのもとのビュー関数を少し変えます。
def get_book(request):
l = []
for i in range(10000):
l.append(models.Book(title=' %s '%i))
models.Book.objects.bulk_create(l) #
return render(request,'get_book.html',locals())
コードの修正が終わったら、他のところは変更する必要がなくて、djangoプロジェクトのブラウザを再起動して改めて訪問します。データ量が10倍に増加した場合、ページの出現速度は上記より速いです。bulk_create方法はdjango ormがわざわざ提供してくれた便利な大量操作データベースの方式で、効率がとても高いです。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。