测试开发进阶(二十三)

数据库操作

c(create)

  • 使用模型内构造方法
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查询集,就相当于一个列表(存放所有项目对象的列表)

对QuerySet查询集进行遍历

获取单个数据

Projects.objects.get(id=1)
# 通过.可以获取到具体的内容
Projects.objects.get(id=1).name
Projects.objects.get(id=1).leader
  1. get返回多条记录会报错
  1. get查询的记录不存在会报出异常

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

filter查询返回的是一个列表

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

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

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

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

exclude反向查询

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

Projects.objects.exclude(id=1)

关联查询

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

tb_interfaces表中添加一条内容

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

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

查看SQL语句

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'}

比较查询

Projects.objects.filter(id__gt=2)

__gt:大于 __gte:大于等于 __lt:小于 __lte:小于等于

多条件 或 查询

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

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

多条件 与 查询

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

查询集的操作

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

u(update)

先获取,后修改,再保存

p = Projects.objects.get(id=1)
p.leader = 'zx'
p.save()

d(delete)

获取后,删除

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

排序

从小到大

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

从大到小

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

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

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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏光城(guangcity)

告别裸奔,赶集抓手

在爬虫过程中,有时有些网站具有反爬虫设置,当爬取次数到达一定程度,那么这个网站就会禁止你的IP对其进行访问,这就是裸奔操作,为了不让对方服务器发现你在爬取对面的...

9720
来自专栏Flutter入门到实战

MongoDB在Android上的使用体验

【说明】:MongoDB也可以在iOS上面使用,我是做安卓开发的,本文只讲解MongoDB在Android上面的使用,iOS的使用情况请上MongoDB官网自行...

30120
来自专栏光城(guangcity)

知识图谱系列之Neo4J

上次写了一篇文章提到了一个有关知识图谱的概念,在本公众号中,并未写有关这方面的文章,那么这一节从python与neo4j方向来共同学习知识图谱的一些实战操作,后...

15220
来自专栏测试开发社区

Lego:美团点评接口自动化测试实践

我认为,一个“好的”自动化测试项目,需要从“时间”、“人力”、“收益”这三个方面出发,做好“取舍”。

26130
来自专栏光城(guangcity)

爬虫系列之丁香园论坛的所有回复用户数据(下)

对于上一节的爬虫,只是做了个简单的数据爬取及存储,但是当遇见不同的个人主页时,代码就会报错,数据就会错落,为了更好的解决这个问题,本节即对上节代码进行优...

9430
来自专栏生信小驿站

miRTarBase数据库

miRTarBase数据库是一个专门收集有实验证据支持的microRNA-mRNA靶向关系(MTI, MicroRNA-Target Interactions...

16630
来自专栏光城(guangcity)

爬虫系列之爬取丁香园用户主页(上)

谷歌浏览器右键检查,页面分析源码,找到如下图的div,然后会发现class="follows-fans clearfix"里面包含这三个关注、粉丝、丁当相关信息...

10540
来自专栏光城(guangcity)

爬虫系列之瓜子二手车抓手

分析发现,多页面不同之处在于'o2'处,这里的2即为和页数,也就是说我只需要拿到页面的总页数,循环遍历即可,这就是本爬虫的核心思路,那么怎么拿到呢?看下图:

17540
来自专栏测试开发社区

自研接口测试平台(Django2+Bootstrap3+Unittest)

断言配置提供了4种方式,状态码,正则加字典的方式,jsonpath,数据库字段值的校验。比对方式也提供了多种选择,有等于,不等于,包含,不包含在列表中等等。

11330
来自专栏以Java架构赢天下

分析阿里/京东/网易Java岗面试,总结出70道高频必问题(含解析)

13340

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励