欢迎关注我的公众号:「测试游记」
数据库操作
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
get返回多条记录会报错
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
开头(不是单词的一部分,例如 in
, is
等)表示「忽略大小写」
exclude
反向查询
下面可以获取到 id!=1
的内容
Projects.objects.exclude(id=1)
关联查询
查询语句:外键字段__从表的字段名__条件
在 tb_interfaces
表中添加一条内容
Projects.objects.filter(interfaces__name='登录接口')
通过 interfaces
的 name
「登录接口」来找到关联表中的具体内容
查看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)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/3281312/blog/4370044