Django----模型----数据库的基本操作
1、添加记录
方式一:save()
方式二(推荐):create()
2、查询记录
(1)all()
1 2 | 查询所有记录,返回queryset对象。 stu_list = Student.objects. all () |
(2)filter()
1 2 | 查询符合条件的对象,返回queryset对象。 stu_list = Student.objects. filter (name = "yuan" ,age = 22 ) |
(3)get()
1 2 3 | 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 如果符合筛选条件的对象超过一个或者没有都会抛出错误。返回模型类对象。 student = Student.objects.get(pk = 104 ) |
(4)first() 和 last()
1 2 3 4 | 分别为查询集的第一条记录和最后一条记录,返回模型类对象。 # 没有结果返回none,如果有多个结果,则返回模型对象 student = Student.objects. filter (name = "刘德华" ).first() |
(5)order_by()
对查询结果排序,返回queryset对象
1 2 3 | # order_by("字段") # 按指定字段正序显示,相当于 asc 从小到大 # order_by("-字段") # 按字段倒序排列,相当于 desc 从大到小 # order_by("第一排序","第二排序",...) |
1 2 3 | student_list = Student.objects. filter (classmate = "301" ).order_by( "-age" ). all () student_list = Student.objects. filter (classmate = "301" ).order_by( "age" ). all () #正序 student_list = Student.objects. filter (classmate = "301" ).order_by( "-age" , "id" ). all () # 年龄倒序,年龄一致按id进行正序 |
(6)exclude()
筛选条件不匹配的对象
(7)count()
1 2 3 | 查询集中对象的个数,计数 ret = Student.objects. filter (classmate = "301" ).count() |
(8)exists()
判断查询集中是否有数据,如果有则返回True,没有则返回False
(9)values() / values_list()
(10)distinct()
去重
(11)contains
说明:如果要包含%无需转义,直接写即可
1 2 | # 查询姓名包含 华 的学生 Student.objects. filter (name__contains = '华' ) |
(12)startswith / endswith
1 2 3 4 5 | 查询姓名以’文’结尾的学生: Student.objects. filter (name__endswith = '文' ) 注意: 以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith. |
(13)isnull
找出所有时间为空的数据:
找出时间不为空的数据:
(14)in
1 2 | 查询编号为 1 或 3 或 5 的学生: Student.objects. filter (id__in = [ 1 , 3 , 5 ]) |
(15)比较查询
1 2 | 查询编号大于 3 的学生: Student.objects. filter (id__gt = 3 ) |
(16)日期查询
year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算:
(17)F 查询
1 2 3 4 5 6 7 8 9 | 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。 语法: """F对象:2个字段的值比较""" from django.db.models import F # SQL: select * from db_student where created_time=updated_time; student_list = Student.objects. filter (created_time = F( "updated_time" )) |
(18)Q 查询
1 2 3 4 5 6 | 查询年龄大于 20 ,并且编号小于 30 的学生: Student.objects. filter (age__gt = 20 ,id__lt = 30 ) 或: Student.objects. filter (age__gt = 20 ). filter (id__lt = 30 ) |
1 2 3 4 | 如果需要实现逻辑或 or 的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。 语法: Q(属性名__运算符 = 值) Q(属性名__运算符 = 值) | Q(属性名__运算符 = 值) |
1 2 3 4 | 查询年龄小于 19 或者大于 20 的学生,使用Q对象如下: from django.db.models import Q student_list = Student.objects. filter ( Q(age__lt = 19 ) | Q(age__gt = 20 ) ). all () |
1 2 3 | Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或 查询年龄大于 20 ,或编号小于 30 的学生,只能使用Q对象实现: Student.objects. filter (Q(age__gt = 20 ) | Q(pk__lt = 30 )) |
1 2 3 | Q对象左边可以使用~操作符,表示非 not 。 查询编号不等于 30 的学生: Student.objects. filter (~Q(pk = 30 )) |
(19)聚合查询
使用aggregate()过滤器调用聚合函数。
聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。
1 2 3 4 | 查询学生的平均年龄: from django.db.models import Sum ,Count,Avg, Max , Min Student.objects.aggregate(Avg( 'age' )) |
注意:aggregate的返回值是一个字典类型,格式如下:
{'属性名__聚合类小写':值}
(20)分组查询
(21)原生查询
执行原生SQL语句, 直接跳过模型, 用原生pymysql操作
1 2 3 4 5 6 7 | ret = Student.objects.raw( "SELECT id,name,age FROM tb_student" ) # student 可以是任意一个模型 # 这样执行获取的结果无法通过QuerySet进行操作读取,只能循环提取 for item in ret: print (item) |
3、删除记录
方式1:模型类对象.delete()
1 2 | student = Student.objects.get( id = 13 ) student.delete() |
方式2:模型类.objects.filter().delete()
1 | Student.objects. filter ( id = 14 ).delete() |
4、修改记录
方式1:使用save()保存更新数据
方式2(推荐):update()
使用模型类.objects.filter().update(),会返回受影响的行数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律