测试开发进阶(二十三)

测试开发进阶(二十三)

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

数据库操作

c(create)

  • 使用模型内构造方法
1
2
3
4
5
6
7
8
9
def create(self, **kwargs):
"""
Create a new object with the given kwargs, saving it to the database
and returning the created object.
"""
obj = self.model(**kwargs)
self._for_write = True
obj.save(force_insert=True, using=self.db)
return obj

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

r(retrieve)

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

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

  • 获取指定记录

get

filter

exclude

获取一个数据的所有记录

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

all

对QuerySet查询集进行遍历

遍历

获取单个数据

1
2
3
4
Projects.objects.get(id=1)
# 通过.可以获取到具体的内容
Projects.objects.get(id=1).name
Projects.objects.get(id=1).leader

get

具体内容

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

错误1

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

错误2

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

filter查询返回的是一个列表

1
Projects.objects.filter(id=1)

filter

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

filter2

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

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

leader__contains

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

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

其他

其他2

exclude反向查询

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

1
Projects.objects.exclude(id=1)

image-20191010074604404

关联查询

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

tb_interfaces表中添加一条内容

添加内容

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

查询

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

查看SQL语句

1
2
3
from django.db import connection
print(connection.queries[-1])
{'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
2
3
p = Projects.objects.get(id=1)
p.leader = 'zx'
p.save()

d(delete)

获取后,删除

1
2
p = Projects.objects.get(id=1)
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/

官方文档

 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
您的支持将鼓励我继续创作!