一、筛选数据
1.filter()
filter是一个迭代器,用于筛选满足某些条件的记录,多个条件之间用逗号隔开。
filter相当于一个容器,把满足条件的记录都装在这个容器中,所以必须用 for in 读取数据。若不存在满足条件的记录,容器返回空。
a.匹配多个条件
查询Student表中80后的学生
stus = Students.objects.filter(s_birth__gte='1980-01-01', s_birth__lte='1989-12-31')
b.获取指定的多条记录
获取指定多个id的值
ids = [1, 2, 5]
stus = Students.objects.filter(id__in=ids)
2.get()
get获取满足记录的一条记录,即使满足条件的有多条记录,也只会返回一条,所以读取数据的时候不能用 for in结构;若不存在满足条件的记录,程序会报错。
查询学生李白的信息
stus = Students.objects.filter(s_name='李白')
3.all()
all用于查询表中的所有内容,返回的内容也是装在容器中,
查询Student表中所有学生
stus = Students.objects.all()
4.first()
获取满足条件的第一个记录
stu = Student.objects.all().first()
5.last()
获取满足条件的最后一个记录
stu = Student.objects.all().last()
6.[ ]
[]切片,如[0]表示取满足条件的第一条记录。
[start, end] 从start开始取值,取到end - 1
stu = Student.objects.all()[0]
7.F()
F用于获取当前对象某属性的值,适用于比较一个对象的多个属性。
查找语文成绩大于数学成绩10的学生
stus = Student.objects.filter(s_yuwen__gt=F('s_shuxue')+10)
8.& | Q ~
&并且,相当于and;|或,相当于or。
& | 都要搭配Q使用,~表示非,如~Q(s_sex='1'),表示匹配sex不是1的学生。
查询语文成绩大于90分的男生
stus = Student.objects.filter(Q(s_yuwen__gt=90) & Q(s_sex='1'))
9.order by()
order by排序,默认排升序,若要按照降序排列,在属性前加-符号
按照语文成绩的高低排列学生,要求从高到低排列
stus = Student.objects.all().order by('-s_yuwen')
10.count()
count对筛选的内容进行计数
获取男生的数据个数
stus = Students.objects.filter(stu_sex=True).count()
11.exists()
exists是否存在,判断某属性值是否存在,返回布尔值。
判断是否存在姓名为李白的学生
stus = Students.objects.filter(stu_name='李白').exists()
12.模糊匹配
a.contains
contains包括,只要属性值包含某字段即符合条件
查询名字中包含王的学生
stus = Student.objects.filter(s_name__contains='王')
b.startswith
startswith以某字符开始,匹配属性值以某字符串开始的记录
查询姓李的学生
stus = Student.objects.filter(s_name__startswith='李')
c.endswith
endswith以某字符结尾,匹配属性值以某字符串结尾的记录
查询名字最后一个字是天的学生
stus = Student.objects.filter(s_name__endswith='天')
13.update()
update更新,对筛选出的记录中的属性值进行修改
修改id=1的学生的姓名为派大星
Student.objects.filter(id='1').update(stu_name='派大星')
14.delete()
delete删除,删除筛选出的所有记录
删除20岁的学生
Student.objects.filter(stu_age='20').delete()
二、表关系
可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的。表关系包含以下三种:
1、一对一
在一对一关系中,A 表中的一行最多只能匹配于 B 表中的一行,反之亦然。如果相关列都是主键或都具有唯一约束,则可以创建一对一关系。
a)OneToOne
2、一对多
一对多关系是最普通的一种关系。在这种关系中,A 表中的一行可以匹配 B 表中的多行,但是 B 表中的一行只能匹配 A 表中的一行。例如,publishers
和 titles
表之间具有一对多关系:每个出版社出版很多书,但是每本书名只能出自一个出版社。
b)foreignkey
3、多对多
在多对多关系中,A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为结合表,它的主键由 A 表和 B 表的外部键组成。例如,authors
和 titles
表具有多对多关系,这是由于这些表都与 titleauthors
表具有一对多关系。titleauthors
表的主键是 au_id
列(authors
表的主键)和 title_id
列(titles
表的主键)的组合。
网友评论