1007.Django模型基础02
一、常用的查询
常用的查询方法(注:User为app项目):
获取所有的记录: rs = User.objects.all()
获取第一条数据:rs = User.objects.first()
获取最后一条数据:rs = User.objects.last()
根据参数提供的条件获取过滤后的记录:rs = User.objects.filter(name=‘xiaoming’)
注意:filter(**kwargs)方法:根据参数提供的提取条件,获取一个过滤后的QuerySet。
排除name为xiaoming的记录:rs = User.objects.exclude(name='xiaoming')
获取一个记录对象:rs = User.objects.get(name='xiaoming')
注意:get返回的对象具有唯一性质,如果符合条件的对象有多个,则get报错!
对结果排序order_by: rs = User.objects.order_by('age')
对多对象排序:rs = User.objects.oeder_by('age', 'id')
逆向排序:rs = User.objects.oeder_by('-age')
将返回来的QuerySet中的model转换为字典:rs = User.objects.all().values()
获取当前查询到的数据的总数:rs = User.objects.count()
常用的查询条件:
注:查找对象的条件的意思是传给以下方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着两个下划线)
exact 相当于等于号: rs = User.objects.filter(name__exact='xiaoming'), iexact:跟exact,只是忽略大小写的匹配;
contains包含:rs = User.objects.filter(name__contains='xiao'), icontains跟contains,唯一不同是忽略大小写。
startwith 以什么开始: rs = User.objects.filter(name__startwith='xiao'), isstartwith:同startwith,忽略大小写。
endwith 以什么结尾:rs = User.objects.filter(name__endwith='xiao'),isendwith:同endwith,忽略大小写。
in 成员所属: rs = User.objects.filter(age__in=[18,19,20])
gt 大于:rs = User.objects.filter(age__gt=20)
gte大于等于:rs = User.objects.filter(age__gte=20)
lt 小于: rs = User.objects.filter(age__lt=20)
lte小于等于:rs = User.objects.filter(age__lte=20)
range区间:rs = User.objects.filter)age__range=(18,20))
isnull 判断是否为空:rs = User.objects.filter(city__isnull=True)
二、常用的模型字段类型
常用的字段类型映射关系:
int---------->IntegerField
varchar--->CharField
longtext--->TextField
date-------->DateField
datetime--->DateTimeField
常用的字段类型:
IntegerField:整型,映射到数据库中的int类型;
CharField:字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度;
TextField:文本类型,映射到数据库中的text类型;
BooleanField:布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去,如果要可以为空,则用NullBooleanField;
DateField:日期类型,没有时间。映射到数据库中是date类型,在使用的时候,可以设置DateFiled.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间;
DateTimeField:日期时间类型。映射到数据库中的是datetime类型,在使用的时候,传递datetime.datetime()进去。
三、Field的常用参数
primary_key:制定是否为主键;
unique:指定是否唯一;
null:指定是否为空,默认为False;
blank:等于True时form表单验证时可以为空,默认为False;
default:设置默认值。
DateField.auto_now:每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。DateField.auto_now_add:第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值。
创建模型类:
app目录下的models.py文件中,创建模型所需要的数据,并定义其Field参数
app目录下的views.py文件中,创建输入对应数据
四、表关系的实现
表关系的实现:
数据库层面 | 模型类层面 | |
一对多 | 外键 |
ForeignKeyField |
一对一 | 外键+唯一键 | OneToOneField |
多对多 | 关联表:外键+联合唯一 | ManyToManyField |
表关系图:
表关系的例子:
学院信息表 | 一对多 | 学生信息表 |
学生信息表 | 一对一 | 学生详细信息表 |
课程表 | 多对多 | 学生信息表 |
创建模型类:
1007.Django模型基础02的更多相关文章
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- Django 07 Django模型基础2 (常用查询和多表关联)
Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...
- Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)
Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...
- 六、Django模型基础第一节
1 数据库的连接配置 django 连接mysql的配置流程: 安装 pymysql pip install pymysql 创建数据库用户 '; grant all on *.* to 'xiang ...
- Django 学习第六天——Django模型基础第一节
一.Django 的 ORM 简介: Django的ORM系统的分析: 1.ORM 概念:对象关系映射(Object Relational Mapping,简称ORM) 2.ORM的优势:不用直接编写 ...
- 九.django模型基础(三)之关联对象操作及多表查询
Ⅰ.关系表的数据操作 1.正向 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 1)更新(增) a.通过属性复制 b.通过主键的方式 总结: ForeignKey 字段的更新,跟普 ...
- 七、Django模型基础第二节——常用查询
1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...
- django模型基础(三)
本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...
- Django 学习第八天——Django模型基础第三节
一.表关系的实现: 一对一:OneToOne(外键+唯一键) xxx = models.OneToOneField('关联的表',on_delete=models.CASCADE) 外键和一对一关系的 ...
- Django 学习第七天——Django模型基础第二节
User 是自己创建的模型类,等于数据库中的表 常用的查询方法: all():获取所有数据: User.objects.all() first():获取第一条数据: User.objects.firs ...
随机推荐
- lxml库和BeautifulSoup库常用点小结
算是本人的学习笔记吧,仅供个人学习使用. 以下内容摘自<Python3网络爬虫开发实战--崔庆才著> 1.lxml库 XPath 常用规则: 表达式 描述 nodename 选取此节点的所 ...
- vue store用法
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) 首字母不能大写 export default new Vuex.Store({ ...
- 6.配置git-码云仓库
使用git需要使用码云或者github,github存在访问慢的情况,所以我使用码云(gitee). git客户端 下载安装 到git官网 https://git-scm.com/ 下载git客户端 ...
- 2022.11.08 NOIP2022 模拟赛五
「LibreOJ NOIP Round #1」DNA 序列 注意到 \(k=10\),\(|\Sigma|=4\),故本质不同的子串个数只有 \(4^{10}\) 种,可以直接压位存下来. 时间复杂度 ...
- [ARC140D] One to One
个人思路: 一棵树也只有一个 \(a=-1\) 的点,所以可以把它看做一个点,但是要记录点的大小 \(sz_i\),即为这棵树的大小.如果本来就是一个点,那么大小为 \(1\). 状态:\(dp_{i ...
- Go 的位操作
在计算机内存昂贵,处理能力有限的美好旧时光里,用比较黑客范的位运算方式去处理信息是首选方式(某些情况下只能如此).时至今日,直接使用位运算仍然是很多计算领域中不可或缺的部分,例如底层系统编程,图形处理 ...
- Word08 创新产品展示说明会邀请函office真题
1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...
- drf从入门到飞升仙界 07
认证组件 ## 认证组件逻辑 # 1.登录认证的限制: - 访问接口,有的需要登陆后才能访问,有的接口,不登录就能访问 # 2.准备: -User表 : 存储用户名,密码 -UserToken表:存储 ...
- JS学习-给Canvas上下文设置样式
给Canvas上下文设置样式 <canvas class="myCanvas" width="700" height="500"> ...
- go读取excel的内容
import "github.com/360EntSecGroup-Skylar/excelize" func SimulationDataHandler(){ f, err := ...