zoukankan      html  css  js  c++  java
  • 批量插入数据与django自带的序列化组件(drf做铺垫)

    批量插入数据

    项目需求:浏览器中访问django后端某一条url(如:127.0.0.1:8080/index/),实时朝数据库中生成一千条数据并将生成的数据查询出来,并展示到前端页面

    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 Book(models.Model):
      title = models.CharField(max_length=64)

    views.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.objcets.all()
      return render(request,'get_book.html',locals())  # 将查询出来的数据传递给html页面

    template/get_book.html

    <!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' %}">
        <link rel="stylesheet" href="{% static 'dist/sweetalert.css' %}">
        <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
        <script src="{% static 'dist/sweetalert.min.js' %}"></script>
    </head>
    <body>
    <div class="container">
        <div class="row">
            <div class="col-md-8 col-md-offset-2">
                {% for book in book_queryset %}
                <p>{{ book.title }}</p>
                {% endfor %}
            </div>
        </div>
    </div>
    </body>
    </html>

    上述代码书写完毕后启动django后端,浏览器访问,会发现浏览器会有一个明显的卡顿等待时间,这不是你的浏览器有问题也不是网速有问题,而是后端再不停的操作数据库,耗时较长,大概需要等待一段时间之后才能正常看到刚刚插入的1000条数据,很明显这样操作数据库的效率太低,那有没有一种方式是专门用来批量操作数据库的呢?答案是肯定的!

    bulk_create方法

    将views.py中原先的视图函数稍作变化

    def book(request):
        l = []
        for i in range(10000):
            l.append(models.Book(title='第%s本书'%i))
        models.Book.objects.bulk_create(l)  # 批量插入数据
            return render(request,'booklist.html',locals())

    代码修改完毕之后其他地方无需改动,重启django项目浏览器重新访问,你会立马发现数据量增大十倍的情况下页面出现的速度居然还比上面的版本要快上速度倍!!!

    bulk_create方法是django orm特地提供给我们的方便批量操作数据库的方式,效率非常高!!!

    django自带的序列化组件

    # 需求:在前端给我获取到后端用户表里面所有的数据 并且要是列表套字典
    import json
    from django.http import JsonResponse
    from django.core import serializers
    def ab_ser(request):
        user_queryset = models.User.objects.all()
    # 手动拼接版本 # [{},{},{},{},{}] # user_list
    = [] # for user_obj in user_queryset: # tmp = { # 'pk':user_obj.pk, # 'username':user_obj.username, # 'age':user_obj.age, # 'gender':user_obj.get_gender_display() # } # user_list.append(tmp) # return JsonResponse(user_list,safe=False) # return render(request,'ab_ser.html',locals()) # 序列化 res = serializers.serialize('json',user_queryset) """会自动帮你将数据变成json格式的字符串 并且内部非常的全面""" return HttpResponse(res)
  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/h1227/p/13040797.html
Copyright © 2011-2022 走看看