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 基本操作的主要内容,如果未能解决你的问题,请参考以下文章

Django_ORM操作

Django_ORM_操作方法

django_orm查询性能优化

Django_ORM框架_关联字段_CRUD操作

Django_ORM框架_关联字段_CRUD操作

django_ORM用法详解