Django 07 Django模型基础2 (常用查询和多表关联)

一、常用查询

  1. #查找数据
  2. def search_user(request):
  3. #获取
  4. rs = User.objects.first() #获取第一条数据
  5. rs = User.objects.last() #获取最后一条数据
  6. rs = User.objects.filter(name = 'TAKA') #获取name为TAKA的数据,返货queryset类型,可以用rs[0]来查询
  7. rs = User.objects.exclude(name = 'TAKA') #排除name为TAKA的数据
  8. rs = User.objects.get(name = 'TAKA') #获取name为TAKA的记录对象,获取的对象具有唯一性,如果获取多个就报错
  9.  
  10. #排序 order_by
  11. rs = User.objects.order_by('age') #以age为准则正向排序
  12. rs = User.objects.order_by('age','id') #以age为第一准则,id为第二准则正向排序
  13. rs = User.objects.order_by('-age') #以age为准则逆向排序
  14.  
  15. #其他方法
  16. rs = User.objects.all().values() #将返回的qureyset中的model转换为字典
  17. rs = User.objects.count() #获取当前查询的数据的总数
  18.  
  19. rs = User.objects.filter(name__exact='budong') #name_exact相当于name
  20. rs = User.objects.filter(name__iexact='budong') #name_iexact跟上面的区别是这个忽略大小写
  21.  
  22. #模糊查询
  23. rs = User.objects.filter(name__contains='i') #name中包含i的对象
  24. rs = User.objects.filter(name__icontains='i') #name中包含i的对象,忽略大小写
  25.  
  26. rs = User.objects.filter(name__startswith='b') #name中以b开头的的对象
  27. rs = User.objects.filter(name__istartswith='b') #name中以b开头的的对象,忽略大小写
  28.  
  29. rs = User.objects.filter(name__endswith='b') # name中以b结尾的的对象
  30. rs = User.objects.filter(name__iendswith='b') # name中以b结尾的的对象,忽略大小写
  31.  
  32. rs = User.objects.filter(age__in=[18,19,20]) #in成员所属,age在18,19,20的对象
  33. rs = User.objects.filter(age__gt=18) #age大于18的对象
  34. rs = User.objects.filter(age__gte=18) #age大于等于18的对象
  35. rs = User.objects.filter(age__lt=18) #age小于18的对象
  36. rs = User.objects.filter(age__lte=18) #age小于18的对象
  37. rs = User.objects.filter(age__range=(18,20)) #age在18到20之间的对象,都包括
  38. rs = User.objects.filter(age__isnull=True) #判断age栏是否为空
  39.  
  40. print(rs)
  41. return HttpResponse('查找数据成功')

二、常用类型和字段参数

  1. #常用的字段类型映射关系
  2. int ----------- IntegetField #整型,映射到数据库中的int类型
  3. varchar ----------- CharFileld #字符串类型,通过max_length指定最大长度
  4. longtext ----------- TextFiled #长文本
  5. tinyint ----------- BooleanField #布尔类型,在使用的时候,传递True/False进去;如果为空,则为NullBooleanField
  6. date ----------- DateFiled #日期;在使用的时候,可以设DateField.auto_now_add当对象第一次被创建的时候自动设置创建时间
  7. datetime ----------- DatetimeField #时间
  1. #Field的常用参数
  2. primary_key #主键
  3. unique #唯一键
  4. null #是否为空,默认为False
  5. blank #等于True时form表单验证是可以为空,默认为False
  6. default #默认值
  7. DateField.auto_now#每次修改都会把当前时间更新进去,只用调用Model.save()方法才会调用,Queryset.update方法将不会调用。这个参数只是Date和Datetime以及Time类才有的
  8. Datetime.auto_now_add# 第一次添加进去,都会讲抢钱时间设置进去。以后修改,不会修改这个值
  1. class Ftest(models.Model):
  2. name = models.CharField(max_length=30,unique=True) #名字,最大长度30,唯一键
  3. age = models.IntegerField() #年龄
  4. note = models.TextField() #长文本
  5. gender = models.BooleanField(default=True) #性别,默认为女(1)
  6. create_time = models.DateTimeField(auto_now_add=True) #创建时间,不更改
  7. update_time = models.DateTimeField(auto_now=True) #更新时间,会自动更改
  8.  
  9. from .models import Ftest
  10. def add_ftest(request):
  11. Ftest.objects.create(name='爱宝贝',age=25,note='啦啦啦啦',gender=False)
  12. return HttpResponse('插入数据成功')
  13.  
  14. def update_ftest(request):
  15. # Ftest.objects.filter(id=2).update(age=80) #使用fiiter是不能成功使用auto_now的,因为是queryset
  16. f = Ftest.objects.get(id=2) #get获取的对象,在使用save才能成功使用auto_now
  17. f.age = 55
  18. f.save()
  19. return HttpResponse('更新数据成功')

三、表关系的建立

  1. from django.db import models
  2.  
  3. # Create your models here.
  4. class Department(models.Model):
  5. d_id = models.AutoField(primary_key=True)
  6. d_name = models.CharField(max_length=30)
  7.  
  8. class Student(models.Model):
  9. s_id = models.AutoField(primary_key=True)
  10. s_name = models.CharField(max_length=30)
  11. department = models.ForeignKey('Department', on_delete=models.CASCADE) # 由于有学生所属学院的关系在,要将这个表与Department表关联在一起,
  12. # 就可以用外键约束起来,这个department关联的是Department表的id,on_delete表示的是上面的数据删除,这个表也会把相关的数据删除
  13. #一对多关系用外键约束即可,默认关联表的主键
  14.  
  15. class Stu_Detail(models.Model):
  16. s_id = models.OneToOneField('Student',on_delete=models.CASCADE) #一对一关系,用Onetoone;同样要加上on_delete
  17. age = models.IntegerField()
  18. gender = models.BooleanField(default=1)
  19. city = models.CharField(max_length=30)
  20.  
  21. class Course(models.Model):
  22. c_id = models.AutoField(primary_key=True)
  23. c_name = models.CharField(max_length=30)
  24. student = models.ManyToManyField('Student') #课程表和学生信息表有这多对多的关系,直接用Manytomany来实现关联,会生成一个中间表,不用加on_delete

Django 07 Django模型基础2 (常用查询和多表关联)的更多相关文章

  1. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  2. Oracle - 查询语句 - 多表关联查询

    /* SQL语句的历史版本 SQL89 比较多 SQL92 SQL99 多表关联查询 笛卡尔积 等值关联查询 非等值关联查询 左外连接 右外连接 全外连接 自连接 */ --------------- ...

  3. django的models模型类的常用数据类型和选项

    django框架的models模块ORM框架,能够让我们通过编写类的方式,帮助我们自动生成数据库表. 生成的数据库表名为 应用模块名称_类名 数据库表中字段名 如果我们没有在参数中指定,就是我们写的类 ...

  4. django的models模型 关联关系和关系查询

    模型类关系 关系字段类型 关系型数据库的关系包括三种类型: ForeignKey:一对多,将字段定义在多的一端中. ManyToManyField:多对多,将字段定义在两端中. OneToOneFie ...

  5. MySQL基础4-SQL简单查询(单表)

    1.SELECT语句 2.运算符的优先级 利用Navicat中的查询方法: 栗子1:查询所有货品信息 栗子2:查询所有货品的id,productName,salePrice 当查询错误的时候出现的界面 ...

  6. SpringDataJPA - 复杂查询总结 (多表关联 以及 自定义分页 )

    实体类 @Entity @Table(name = "t_hotel") @Data public class THotel { @Id private int id; priva ...

  7. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  8. day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询

    目录 1.URL别名&反向解析 2.URL分发&命名空间 3.ORM多表操作-修改 4.ORM多表操作-查询 4.1 基于对象的跨表查询 4.2 基于双下划线的跨表查询 4.3 聚合查 ...

  9. 完爆Facebook/GraphQL,APIJSON全方位对比解析(三)-表关联查询

    相关阅读: 完爆Facebook/GraphQL,APIJSON全方位对比解析(一)-基础功能 完爆Facebook/GraphQL,APIJSON全方位对比解析(二)-权限控制 自APIJSON发布 ...

随机推荐

  1. python爬虫(10)--PyQuery的用法

    简介 pyquery 可让你用 jQuery 的语法来对 xml 进行操作.这I和 jQuery 十分类似.如果利用 lxml,pyquery 对 xml 和 html 的处理将更快. 初始化 在这里 ...

  2. maven中pom.xml元素含义

  3. pow求一个数的n次幂

    #!/usr/bin/env python i = pow(2,5) #求一个数的n次幂 print(i) C:\Python35\python3.exe F:/Python/2day/c6.py 3 ...

  4. MSSQL 当前数据库中已存在用户或角色,SQLServer2008,错误15023,

    原因: sql server中“登录”与“用户”的区别,“登录”用于用户身份验证,而数据库“用户”帐户用于数据库访问和权限验证.登录通过安全识别符 (SID) 与用户关联.将数据库恢复到其他服务器时, ...

  5. day35-hibernate映射 05-Hibernate的一级缓存:快照区

    SessionImpl里面有很多的Java集合,很多java集合才构成了一级缓存.一级缓存里面有一个非常特殊的区域叫做快照区.SessionImpl实现了Session接口,有很多Java集合(包括M ...

  6. [poj2653]Pick-up sticks

    题目大意:给定一系列线段,以及放在平面上的顺序,给出没有被其他覆盖的线段. 解题关键:线段相交的判断. 满足两个条件即可:快速排斥实验.跨立实验. #include<cstdio> #in ...

  7. linux 监控内存介绍

    一:系统监控:1.对cpu的监测:查看进程占用内存情况 top pid user PRI NI size RSS share stat 进程号 进程所属用户 优先级 优先级 进程所占空间 使用物理内存 ...

  8. cocos2d中setBlendFunc设置颜色混合方案

    CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案.ccBlendFunc包含了一个src和一个dst,分别表示源和目标的运算因子. 如 ...

  9. BMP是可以保存alpha通道的。

    一直以来都不太熟悉BMP格式,今天保存图片的时候发现bmp是可以保存透明通道的,突然想起来以前下载的一些游戏素材贴图里面就有一些bmp格式的贴图.记录一下.

  10. Git 之 协同开发

    GitHub中多人协同开发和单人开发还是有点差别,协同开发一般有两种方式: 合作者,将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码. 组织,创建一个组织,然后再该组织下可以创建多个项 ...