首页 > 其他分享 >Django内置序列化组件(drf前身)和批量操作数据加上分页器

Django内置序列化组件(drf前身)和批量操作数据加上分页器

时间:2023-05-04 20:59:41浏览次数:41  
标签:obj 批量 models Django book dict 序列化 drf

目录

一、django内置序列化组件(drf前身)

这里的内置序列化组件,其实就是实现将后端数据,存放到字典中或是存放到列表中有序输出。

  • 方式一
这里是我们用JsonResponse模块自己实现的代码
'''前后端分离的项目 视图函数只需要返回json格式的数据即可'''
from app01 import models
from django.http import JsonResponse


def ab_ser_func(request):
    # 1.查询所有的书籍对象
    book_queryset = models.Book.objects.all()  # queryset [对象、对象]
    # 2.封装成大字典返回
    data_dict = {}
    for book_obj in book_queryset:
        temp_dict = {}
        temp_dict['pk'] = book_obj.pk
        temp_dict['title'] = book_obj.title
        temp_dict['price'] = book_obj.price
        temp_dict['info'] = book_obj.info
        data_dict[book_obj.pk] = temp_dict  # {1:{},2:{},3:{},4:{}}
    return JsonResponse(data_dict)
  • 方式二
序列化组件(django自带的,后续会学更厉害的drf)
# 导入内置序列化模块
from django.core import serializers
# 调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据
res = serializers.serialize('json', book_queryset)
return HttpResponse(res)

使用序列化模块,不仅节省代码,同时他封装的更精致
image

二、批量操作数据

当我们给数据库插入很多的数据时,如果我们使用orm操作一条条用for循环插入数据,效率很低。

这里就需要介绍两个批量操作数据的方法:

models.Books01.objects.bulk_create

models.Books01.objects.bulk_update

这里的create是批量创建数据,update是批量更新数据。

在进行批量操作数据之前,下方代码使用的方式是把数据封装到对象中,然后把对象添加到一个列表中,最后执行批量操作的时候把这个列表当作参数放到小括号内即可。

def ab_bk_func(request):
	方式一:
    # 1.往books表中插入10万条数据
    # for i in range(1, 100000):
    #     models.Books.objects.create(title='第%s本书' % i)
    
    """直接循环插入 10s 500条左右"""
	方式二:
    book_obj_list = []  # 可以用列表生成式[... for i in ... if ...]     生成器表达式(... for i in ... if ...)
    for i in range(1, 100000):
        book_obj = models.Books01(title='第%s本书' % i)  # 单纯的用类名加括号产生对象
        book_obj_list.append(book_obj)
    # 批量插入数据
    models.Books01.objects.bulk_create(book_obj_list)
    """使用orm提供的批量插入操作 5s 10万条左右"""
    # 2.查询出所有的表中并展示到前端页面
    book_queryset = models.Books01.objects.all()
    return render(request, 'BkPage.html', locals())

标签:obj,批量,models,Django,book,dict,序列化,drf
From: https://www.cnblogs.com/nankeloveiu/p/17372457.html

相关文章

  • Django之模型层(二) Q查询进阶 ORM查询优化 ORM事务 ORM常用字段类型和字段参数 多对
    目录一、Q查询进阶操作这里主要就是让查询数据的时候,可以使用input获取的信息,进行用户交互。fromdjango.db.modelsimportQq_obj=Q()#1.产生q对象q_obj.connector='or'#默认多个条件的连接是and可以修改为orq_obj.children.append(('pk',1))#2.添加查询条件......
  • PHP序列化与反序列化(pop链)
    构造思想构造一条完整的pop链要有头有尾,头一般是从传参的地方开始并反序列化,尾是可以达到攻击或获取数据的·口子,比如eval,include等可以执行或者包含读取。有了头又有了尾,就要通过魔术方法把它们连接起来。魔术方法__construct() 创建对象时触发__destruct() 对象被销毁时......
  • django批量插入数据bulk_create
    场景django项目有个接口是插入多条数据,大概是50条数据吧,大概用了3s左右,10条数据为一组,插入不同的数据表中。3s对于这个接口来说是比较频繁的操作,所以3s是不能容忍的。目前一直是使用的create的方法,百度了解到有一种批量插入的方法bulk_create。使用之后,接口响应时间稳定在1s左......
  • Django--数据库迁移命令
    数据库迁移命令我这里用的是Django3.2版本,mysql8.0版本1.我们的模型类需要写在应用下的model.py文件中#Createyourmodelshere.classUser(models.Model):#idintprimarykeyauto_incrementuuid=models.AutoField(primary_key=True)#注意要这个prim......
  • Django--orm介绍
    djangoORM简介"""ORM:对象关系映射"""orm目的就是为了能够让不懂SQL语句的人,通过python面向对象的知识点也能够轻松自如的操作数据库类》》》表对象 》》》 表里面的数据对象点属性》》》字段对应的值#缺点:sql封装死了,有......
  • 通信协议之序列化
    转:http://blog.chinaunix.net/uid-27105712-id-3266286.html?page=2通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。常见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼......
  • Django如何更换默认的数据库?
    问题:Django默认的sqlite3不好用。如何更换呢?解决:第一步:配置文件在setting中--更改databaseDATABASES={#'default':{#'ENGINE':'django.db.backends.sqlite3',#'NAME':BASE_DIR/'db.sqlite3',#......
  • django-channel 配置 channel layer 添加redis的账号和密码
    最近公司要使用django-channel搭建socket, 文档:https://channels.readthedocs.io/en/stable/introduction.html文档里面并没有写如果redis有账号和密码的话,怎么配置。配置方法:https://github.com/django/channels/issues/164#issuecomment-220513297如下:CHANNEL_LAYERS......
  • Django--request里面都有什么
    1.打个断点,调试运行。2.查看内容 3.POST里面都有什么?ifrequest.method=="POST":#获取用户提交的数据#print(request.POST)#<QueryDict:{'username':['123'],'password':['233']}>当成dict字典处理即可......
  • Django--基础登录的表单
    HTML页面关键代码<formaction=""method="post"> <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><!--导入jquery-->......