测试开发进阶(二十三)

一世执手 提交于 2021-01-13 17:05:21


来呀

欢迎关注我的公众号:「测试游记」

数据库操作

c(create)

  • 使用模型内构造方法

  
    
  
  
  1. def create(self, **kwargs):

  2. """

  3. Create a new object with the given kwargs, saving it to the database

  4. and returning the created object.

  5. """

  6. obj = self.model(**kwargs)

  7. self._for_write = True

  8. obj.save(force_insert=True, using=self.db)

  9. return obj

从代码中可以看出自带了 save操作

r(retrieve)

  • 获取一个数据表的所有数据

返回所有记录组成的模型和对象集合(queryset查询集)

  • 获取指定记录

get

filter

exclude

获取一个数据的所有记录

QuerySet查询集,就相当于一个列表(存放所有项目对象的列表)

对QuerySet查询集进行遍历

获取单个数据

  
    
  
  
  1. Projects.objects.get(id=1)

  2. # 通过.可以获取到具体的内容

  3. Projects.objects.get(id=1).name

  4. Projects.objects.get(id=1).leader

  1. get返回多条记录会报错

  1. get查询的记录不存在会报出异常

获取某一些记录。filter()或者exclude()

filter查询返回的是一个列表

  
    
  
  
  1. Projects.objects.filter(id=1)

  
    
  
  
  1. Projects.objects.filter(leader='zx_94')

  
    
  
  
  1. Projects.objects.filter(leader__contains='zx')

使用 leader__contains获取符合条件的查询集「模糊查询」

还有一些其他的操作,可以根据名称或SQL常识进行使用

i开头(不是单词的一部分,例如 inis等)表示「忽略大小写」

exclude反向查询

下面可以获取到 id!=1的内容

  
    
  
  
  1. Projects.objects.exclude(id=1)

关联查询

查询语句:外键字段__从表的字段名__条件

tb_interfaces表中添加一条内容

  
    
  
  
  1. Projects.objects.filter(interfaces__name='登录接口')

通过 interfacesname「登录接口」来找到关联表中的具体内容

查看SQL语句

  
    
  
  
  1. from django.db import connection

  2. print(connection.queries[-1])

  3. {'sql': "SELECT `tb_projects`.`id`, `tb_projects`.`name`, `tb_projects`.`leader`, `tb_projects`.`tester`, `tb_projects`.`programer`, `tb_projects`.`publish_app`, `tb_projects`.`desc` FROM `tb_projects` INNER JOIN `tb_interfaces` ON (`tb_projects`.`id` = `tb_interfaces`.`project_id`) WHERE `tb_interfaces`.`name` = '登录接口' LIMIT 21", 'time': '0.001'}

比较查询

  
    
  
  
  1. Projects.objects.filter(id__gt=2)

__gt:大于

__gte:大于等于

__lt:小于

__lte:小于等于

多条件 或 查询

以下语句表示查询 leader='zx'id=1的内容

  
    
  
  
  1. Projects.objects.filter(Q(leader='zx') | Q(id=1))

多条件 与 查询

  
    
  
  
  1. Projects.objects.filter(leader='zx', id=1)

查询集的操作

查询集相当于一个列表,支持列表中的大多数操作(索引,正向切片,for) 查询集是对数据库操作的一种优化 查询集会缓存结果

u(update)

先获取,后修改,再保存

  
    
  
  
  1. p = Projects.objects.get(id=1)

  2. p.leader = 'zx'

  3. p.save()

d(delete)

获取后,删除

  
    
  
  
  1. p = Projects.objects.get(id=1)

  2. p.delete()

排序

从小到大

  
    
  
  
  1. Projects.objects.filter(id__gte=3).order_by('name')

从大到小

  
    
  
  
  1. Projects.objects.filter(id__gte=3).order_by('-name')

当前一个字段相同,以后一个来排序

  
    
  
  
  1. Projects.objects.filter(id__gte=3).order_by('name','-publish_app')

阅读官方文档

https://docs.djangoproject.com/en/2.2/

「Tutorials」入门:https://docs.djangoproject.com/en/2.2/intro/

「Topic guides」专题:https://docs.djangoproject.com/en/2.2/topics/

「Reference guides 」接口:https://docs.djangoproject.com/en/2.2/ref/

「How-to guides 」进阶内容:https://docs.djangoproject.com/en/2.2/howto/

本文分享自微信公众号 - 测试游记(zx94_11)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!