django_orm 基本操作
Posted ago-0912
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django_orm 基本操作相关的知识,希望对你有一定的参考价值。
单表操作
1 增的操作: 2 3 一种方式:表名.objects.create(name=‘xxoo‘) 4 5 第二种方式:表名(name=‘xxoo‘) 6 7 obj=表名(name=‘xxoo‘) 8 9 obj.save() 10 11 第一种方式就是第二种方式的内部操作 12 13 14 15 查的操作: 16 17 获取所有:表名.objects.all() 18 19 条件获取:表名.objects.filter(name=‘xxoo‘) 表名.objects.filter(id=1) 表名.objects.filter(id=1,name=‘xxoo‘) 20 21 条件是大于1:表名.objects.filter(id__gt=1) 不能使用id>1,是因为传参数不能出现>的表达式, 22 23 只认等于号. 24 25 找到的结果:[obj(id,name),obj(id,name)] 26 27 28 29 只取第一个:objects.filter(id__gt=1).first() 30 31 找到的结果:[obj(id,name)] 32 33 神奇的双下划线:可以做跨表,也可以作为查找的条件筛选 34
英文全称:
1 -gt: (greater than) 大于 2 -ge: (greater than or equal) 大于或等于 3 -lt: (less than) 小于 4 -le: (less than or equal)小于或等于 5 -ne: (not equal) 不相等 6 -eq: (equal) 相等 7 -nq: (not equal) 不等于
1 删的操作: 2 3 表名.objects.filter(id=1).delete() 4 5 表名.objects.all().delete() 6 7 8 9 改的操作: 10 11 表名.objects.all().update(name=‘xxoo‘) 12 13 表名.objects.filter(id=1).update(name=‘xxoo‘) 14
一对多操作
Classes班级表
id name
1 1班
2 2班
Students学生表
id username age gender cs_id
1 ago 12 男 1
第三张表增加了外键
1 增的操作: 2 3 第一种方式: 4 5 Student.objects.create(username=‘东北‘,age=18,gender=‘男‘,cs_id=1) 6 10 11 第二种方式: 12 13 Student.objects.create(username=‘东北‘,age=18,gender=‘男‘,cs=Classes.objects.filter(id=1).first()) 14 15 cs拿到的数据:[obj(id,name)] 16 17 18 19 20 21 查的操作: 22 23 例:只要是all(),filter()拿到的数据都是多行的数据,保存的时候都要用列表存起来 24 25 可以用来循环 26 27 28 29 ret=Student.objects.all() 30 31 for item in ret: 32 33 print(item.id) 34 35 print(item.name) 36 37 print(item.age) 38 39 print(item.gender) 40 41 print(item.cs_id) 42 43 在这里print(item.cs_id)找到的是外表的值value 44 45 在这里print(item.cs)找到的是外表的值的集合Queryset 46 47 48 49 所以能找到加了外键的外表的值: 50 51 print(item.cs.id) 52 53 print(item.cs.name) 54 55 56 57 删的操作: 58 59 Students.objects.filter(id=1).delete() 60 61 Students.objects.filter(cs_id=1).delete() 62 63 64 65 例1 66 67 cid=input(‘输入班级id‘) 68 69 Students.objects.filter(cs_id=cid).delete() 70 71 例2 72 73 cname=input(‘输入班级名称‘) 74 75 错误:Students.objects.filter(cs.name=cname).delete()会报错 cs.name就是等于cs__name 76 77 Students.objects.filter(cs__name=cname).delete() filter跨表操作,需要用双下划线,规定写法 78
多对多:
Classes班级表
id name
1 1班
2 2班
class Classes(models.Model):
title=models.CharField(max_lenght=32)
m=models.Model.ManyToManyField(‘Teachers‘)第三张表操作
Teachers教师表
id name
1 ago
2 ago2
class Teachers(models.Model):
name=models.CharField(max_length=32)
增的操作:
obj= Classes.objects.filter(id=1).first() 先找到class表id=1的数据
obj.m.add(1) 操作第三张表
obj.m.add(2)
也可以传字典:obj.m.add([3,4])
C_T老师班级表
id 班级id 老师id
1 1 2
1 1 1
1 1 3
1 1 4
1 删的操作: 2 3 obj.m.remove([1,2]) 只删除老师id=1和2的数据 4 5 obj.m.clear() 清空操作 6 7 8 9 重置操作: 10 11 obj.m.set([2,3,5]) 把这个班的老师id=4的数据删除,并自增id在最后一行增加一条老师id=5,set的就是最终的结果 12 13 14 15 查的操作: 16 17 例:把1班老师找出来 18 19 先把班找出来:obj=Classes.objects.filter(id=1).first() 20 21 obj.id 22 23 obj.title 24 25 ret = obj.m.all()目的是拿到老师的信息 26 27 ret是一个[老师obj(id,name),obj2(id,name)] 28
以上是关于django_orm 基本操作的主要内容,如果未能解决你的问题,请参考以下文章