一、建立数据库模型类

  1.在model里创建模型类。(继承models.Model) 

  1. from django.db import models
  2.  
  3. # Create your models here.
  4.  
  5. class Role(models.Model):
  6. role_name = models.CharField(max_length=32, unique=True)
  7. class Meta:
  8. db_table = "pp_role"
  9.  
  10. class Classroom(models.Model):
  11. class_name = models.CharField(max_length=32,verbose_name="班级名称",unique=True)
  12. address = models.CharField(max_length=32,null=True)
  13. class Meta:
  14. db_table = "pp_class"
  15.  
  16. class User(models.Model):
  17. username = models.CharField(max_length=32,verbose_name="姓名")
  18. age =models.IntegerField(verbose_name="年龄")
  19. home = models.CharField(verbose_name="家乡",null=True,max_length=32)
  20. hight = models.IntegerField(verbose_name="身高",null=True)
  21.  
  22. #多对多
  23. roles = models.ManyToManyField(Role)
  24.  
  25. #一对多
  26. classrooms = models.ForeignKey(Classroom,on_delete=models.CASCADE,null=True)
  27.  
  28. class Meta:
  29. db_table="pp_user"

model

模型里数据可用字段类型

字段类型约束

外键设置

同步模型类的数据到数据库

    python manage.py makemigration

    python manage.py migrate

二、数据的增加 

在views中添加

  1. def post(self,request):
  2. data=request.data
  3. ser=UserSer1(data=data)
  4. ser.is_valid()
  5. print(ser.errors)
  6. ser.save()
  7. return Response({"code":200})

View

三、数据的删除

在views中添加

  1. def delete(self,request):
  2. user_id = request.query_params.get('user_id')
  3. print(user_id,1111111111111)
  4. user_obj = User.objects.filter(pk=user_id)
  5. user_obj.delete()
  6. return Response({'msg':'sccg'})

View

四、数据的修改

在views中添加

  1. def put(self,request):
  2. data=request.data
  3. id=request.data.get("id")
  4. user=User.objects.get(id=id)
  5. Ser=UserSer1(user,data=data)
  6. Ser.is_valid()
  7. Ser.save()
  8. return Response({"code":200})

Views.py

五、数据库的查询

1.基本查询:   

    user= User.objects.get(btitle='张三')       #单一查询,如果结果不存在报错
    user= User.objects.all(btitle='张三')        #查询多个结果,有多少返回多少,不存在返回None
    user= User.objects.count(btitle='张三' )       #查询结果的数量
    user= User.objects.exclude(btitle='张三')    #查询结果取反

2.模糊查询:

    a.contains   是否包含

      user= User.objects.filter(btitle__contains='市')   #查询结果包含‘市’的

    b.startswith,endswith    以指定值开头或结尾

      user= User.objects.filter(btitle__startswith='北')   #查询以‘北’开头的

      user= User.objects.filter(btitle__endswith='市')    #查询以‘市’结尾的

3.空查询:

    isnull  是否为空

      user= User.object.filter(bititle__isnull=Flase)           #查询bititle不为空

4.范围查询:

    in  在范围内

    range 相当于between...and...

     book = BookInfo.object.filter(id__in = [1,5,13,24])    #查询id为1或5或13或24

     book = BookInfo.object.filter(id__range = [10,20])    #查询范围为10-20的id

  5.比较查询:

    gt        大于

    gte      大于等于

    lt        小于

    lte      小于等于

    exclude   不等于

      book = BookInfo.object.filter(id__gt =10)  #查询id大于10的

       book = BookInfo.object.exclude(id = 10)   #查询id不等于的10的

  6.日期查询 

    year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

      book = BookInfo.object.filter(bpub_date__year = 1977)  #查询1977年出版的书

      book = BookInfo.object.filter(bpub_date__gt =date(1977,1,1))  #查询1977年1月1日以后出版的书

  7.F对象和Q对象

    比较两个字段对象之间的关系用F对象。(F对象可以进行运算)

      book = BookInfio.Object.filter(bread__gte=F('bcomment'))  #查询阅读量等于评论量的对象

      book = BookInfio.Object.filter(bread__gte=F('bcomment') * 2 )

    与逻辑运算符连用使用Q对象。    或(  |  )       与(  &  )  非(  ~  )

      book = BookInfo.Object.filter(Q(bread__gte=20) | Q(pk__lt=3))  #查询阅读量为20或者id为3的对象

  8.聚合函数

    使用aggregate()过滤器调用聚合函数。聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和

      book = BookInfo.Object.aggregate(Sum('bread'))  #求阅读量的和

  9.排序    

    使用order_by对结果进行排序

      book=BookInfo.object.all().order_by('bread')    #按阅读量的升序排列

      book=BookInfo.object.all().order_by('-bread')    #按阅读量的降序排列

  10.关联查询

    一对多模型

    一到多的访问语法:一对应的模型类对象.多对应的模型类名小写_set

      b = BookInfo.object.filter(id = 1)

      b.heroinfo_set.all()      #查询book_id = 1的书里的所有英雄

    (一本书里有多个英雄,一个英雄只能存在一本书里。表关系为一对多,英雄表里外键关联书id,英雄表里的存放多个书id。英雄表为多,书表为一。)

    多到一的访问语法:多对应的模型类对象.多对应的模型类中的关系类属性名

      h = HeroInfo.object.filter(id = 1)

      h.hbook          #查询英雄id = 1的书是哪本。

    方向查询除了可以使用模型类名_set,还有一种是在建立模型类的时候使用related_name来指定变量名。

      hbook= model.ForeignKey(HeroInfo,on_delete=model.CACADE,null=Ture,related_name='heros')

      b.herose.all()

六、多对多表操作

1、建多对多表
在modle中添加

  1. class Student(models.Model):
  2. name = models.CharField(max_length=32)
  3.  
  4. # 老师类
  5. class Teacher(models.Model):
  6. name = models.CharField(max_length=32)
  7. stu = models.ManyToManyField(to='Student',related_name='teacher') #让django帮助建立多对多关系表
  8. model.py

models.py

在views中添加

  1. class ManyToManyTest(APIView):
  2.  
  3. def get(self, request):
  4. # 方法一:在建立manytomany的models里查数据
  5. # teacherobj = models.Teacher.objects.get(id=2)
  6. # data = teacherobj.stu.all()
  7. # data_list = []
  8. # for i in data:
  9. # data_dic={
  10. # "student_name":i.name,
  11. # "teacher_name":teacherobj.name
  12. # }
  13. # data_list.append(data_dic)
  14. # return Response(data_list)
  15.  
  16. # 方法二:在未建立manytomany的models里查数据
  17. studentobj = models.Student.objects.get(id=2)
  18. data = studentobj.teacher_set.all()
  19. data_list = []
  20. for i in data:
  21. data_dic = {
  22. "student_name": studentobj.name,
  23. "teacher_name": i.name
  24. }
  25. data_list.append(data_dic)
  26. return Response(data_list)
  27.  
  28. def post(self, request):
  29.  
  30. # 方法一:在建立manytomany的models里添加数据,(一条,一个对象)
  31. # teacherobj = models.Teacher.objects.filter(id=1).first()
  32. # studentobj = models.Student.objects.filter(id=2).first()
  33. # teacherobj.stu.add(studentobj)
  34. # return Response({
  35. # "status": 200
  36. # })
  37.  
  38. #方法二:在未建立manytomany的models里添加数据,(一条,一个对象)
  39. teacherobj = models.Teacher.objects.all()
  40. studentobj = models.Student.objects.filter(id=2).first()
  41. studentobj.teacher_set.set(teacherobj)
  42. return Response({
  43. "status": 200
  44. })
  45.  
  46. def put(self, request):
  47.  
  48. # 方法一:在建立manytomany的models里修改数据,参数只能是可迭代对象
  49. teacherobj = models.Teacher.objects.filter(id=3).first()
  50. studentobj = models.Student.objects.filter(id=2)
  51. teacherobj.stu.set(studentobj)
  52. return Response({
  53. "status": 200
  54. })
  55.  
  56. #方法二:在未建立manytomany的models里修改数据,参数只能是可迭代对象
  57. # teacherobj = models.Teacher.objects.all()
  58. # studentobj = models.Student.objects.filter(id=2).first()
  59. # studentobj.teacher_set.set(teacherobj)
  60. # return Response({
  61. # "status": 200
  62. # })
  63.  
  64. def delete(self, request):
  65.  
  66. # 方法一:在建立manytomany的models里删除数据,(一条,一个对象)
  67. # teacherobj = models.Teacher.objects.filter(id=1).first()
  68. # studentobj = models.Student.objects.filter(id=2).first()
  69. # teacherobj.stu.remove(studentobj)
  70. # return Response({
  71. # "status": 200
  72. # })
  73.  
  74. #方法二:在未建立manytomany的models里删除数据,(多条,可迭代对象)
  75. teacherobj = models.Teacher.objects.all()
  76. studentobj = models.Student.objects.filter(id=2).first()
  77. studentobj.teacher_set.remove(*teacherobj)
  78. return Response({
  79. "status": 200
  80. })
  81. views.py

Views.py

  1. 1 HeroInfo.objects.create(
  2. 2 hname='沙悟净',
  3. 3 hgender=0,
  4. 4 hbook=book

Django之数据库--ORM的更多相关文章

  1. django 操作数据库--orm(object relation mapping)---models

    思想 django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM). PHP:activerecord Java:Hibernate C#:Ent ...

  2. Django之 数据库ORM

    一.ORM Django的 业务 少不了 跟数据库打交道,不然没有数据库保存一些数据将是一件很糟糕的事情.Django 对 数据库 支持原生的 SQL语句,但更好的对数据库支持,Django自己有一套 ...

  3. django之数据库orm

    一.数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1>sqlite django默认使用sqlite的数据库,默认自带sq ...

  4. django操作数据库 ORM

    一,数据库连接 创建类 a. 在models.py中先写类 from django.db import models # 表名是app01_userinfo class UserInfo(models ...

  5. Django框架之数据库ORM框架

    首先,我来介绍一下什么是ORM框架: O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮 ...

  6. Django学习笔记〇四——数据库ORM的使用(有待修改)

    Django框架基本上都是要和数据库结合使用的,我在以前讲过SQLAlchemy框架的使用,Django支持的不是SQLAlchemy,但是也内嵌了ORM框架,可以不需要直接面对数据库编程,而可以通过 ...

  7. Django中的ORM如何通过数据库中的表格信息自动化生成Model 模型类?

    Inspectdb Django项目通过绑定的数据库中的相应表格直接自动化生成Model 模型类 python manage.py inspectdb Django 中的 ORM 可以实现对象关系映射 ...

  8. ORM,Django对数据库的连接和使用

    ORM,Django对数据库连接和使用数据 ORM(对象关系映射) 很多语言中的web框架都有这个概念 为什么要有ORM? 写程序离不开数据 新的语法,不需要我们自己写SQL语句 我们按照新的语法写代 ...

  9. Django中的ORM进阶操作

    Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...

随机推荐

  1. 算法笔记之KMP算法

    本文是<算法笔记>KMP算法章节的阅读笔记,文中主要内容来源于<算法笔记>.本文主要介绍了next数组.KMP算法及其应用以及对KMP算法的优化. KMP算法主要用于解决字符串 ...

  2. 2.1获取Git仓库-2.2记录每次更新到仓库

    2.1 获取 Git 仓库 获取 Git 仓库通常有两种方式 将尚未进行版本控制的本地目录转换为 Git 仓库: 从其它服务器 克隆 一个已存在的 Git 仓库. 在已存在目录中初始化仓库 首先进入该 ...

  3. wpf 全局异常捕捉+错误日志记录+自动创建桌面图标

    /// /// 创建桌面图标 /// public static void CreateShortcutOnDesktop(string LnkName) { String shortcutPath ...

  4. CORS跨域请求:前后端分离

    1. 请求过滤器: /** * OncePerRequestFilter保证在任何Servlet容器中都是一个请求只执行一次的过滤器. */ public class CorsFilter exten ...

  5. 第三方库文件Joi对数据进行验证的方法以及解决Joi.validate is not a function的问题

    Joi:javaScript对象的规则描述语言和验证器 1.npm install joi@14.3.1 2.建立joi.js文件 3.导入第三方包joi const Joi = require('j ...

  6. python 安装selenium首次运行错误selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH

    问题原因: 没有安装相关的支撑driver https://npm.taobao.org/mirrors/chromedriver/ 下载对应的driver 放置到python路径下

  7. tcp syn-synack-ack 服务端接收ack

    TCP 服务端 接收到ack tcp_v4_rcv() -> tcp_v4_do_rcv() -> tcp_v4_hnd_req() + tcp_child_process()tcp_v4 ...

  8. linux netfilter nat1

    linux netfilter nat1 2020整理云笔记上传

  9. 查找数组中第k大的数

    问题:  查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思考:1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. ...

  10. .net core中的哪些过滤器 (Authorization篇)

    前言 咱们上篇说到,过滤的简单介绍,但是未介绍如何使用,接下来几篇,我来给大家讲讲如何使用,今天第一篇是Authorization.认证过滤器, 开发环境介绍 开发工具:VS2019 开发环境:.ne ...