Django基础模型层(77-78)
一 单表操作:
1 mysql数据库:settings里配置
'default': {
# key值必须都是大写
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day76',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'admin',}
2 在init文件中:
import pymysql
pymysql.install_as_MySQLdb()
3 在models中,写类,写类的属性
#自增,int,主键
id = models.AutoField(primary_key=True)
#varchar,长度32
name = models.CharField(max_length=32)
#Decimal 长度5,小数位2位
price = models.DecimalField(max_digits=5, decimal_places=2)
#日期类型,可以为空
create_data=models.DateField(null=True)
4 数据库迁移:
python3 manage.py makemigrations --->只是对数据变更,做记录
python3 manage.py migrate ---->把变更,同步到数据库
python3 manage.py showmigrations ---->查看那个没有提交到数据库
5 新增表,删除表,新增字段,删除字段---->执行数据库迁移的两条命令就可以了
6 单表增:
-两种方式
7 单表修改:
-先查询出来,然后update(queryset对象的方法)
-对象要更新,用save方法
8 单表删除:
-先查询出来,然后delete(queryset对象和模型对象的方法)
*****用queryset删除,修改的时候,一定要注意,数据是几条
-删除数据表中所有数据:Book.objece.all().delete()
9 单表查询
-all() 查询所有结果
-filter(**kwargs) 与所给筛选条件相匹配的对象
-get(**kwargs) 有且只有一条数据,符合筛选条件的对象超过一个或者没有都会抛出错误
-exclude(**kwargs) 与所给筛选条件不匹配的对象
-order_by(*field) 对查询结果排序('-id') -*field 取反
-reverse() 查询结果反向排序
-count() 数据库中匹配查询的对象数量
-first()
-last()
-exists() 包含数据,就返回True,否则返回False
-values(*field) 得到的不是一系列model的实例化对象,而是一个可迭代的字典序列
-values_list(*field) 返回一个元组序列,values返回的是一个字典序列
-distinct() 剔除重复
10 单表基于双下划线模糊查询
Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")---->%python%
Book.objects.filter(title__endswith="py")----->%py
Book.objects.filter(title__startswith="py")---->py%
Book.objects.filter(title__icontains="python")--->忽略大小写
Book.objects.filter(pub_date__year=2012,pub_date__month=12)
二 创建多表模型(详情见代码) (约束,外键管理--->不写脏数据)
#用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id
# ManyToManyField会自动创建第三张表
# *************重点
# 一对一的关系:OneToOneField
# 一对多的关系:ForeignKey
ForeignKey(to=Publish, to_field='id',on_delete=models.CASCADE)
级联删除:CASCADE
设置为空:SET_NULL
什么都不做:DO_NOTHING
# 多对多的关系:ManyToManyField
三 添加表记录
1 一对多新增
-两种方式:
-publish=对象
-publish_id=id
2 一对多删除:同单表删除
3 一对多修改:两种方式,可以传对象,可以传id
4 一对一跟一对多一样
5 多对多:
-add ----->可以传对象,可以传id,可以传多个
-remove ----->可以传对象,可以传id,可以传多个
-clear ---->没有参数
-set ----->先清空,再添加,传参,只能传列表,列表里面可以是对象,可以是id
四 基于对象的跨表查询
1 一对一
正向:正向查询按字段
反向:反向查询按表名小写
2 一对多
正向:正向查询按字段
反向:反向按表名小写_set.all()
3 多对多
正向:正向查询按字段
反向查询:反向按表名小写_set.all()
4******基于对象的查询,就是多次查询(子查询)
正向---->关联字段在那个表,从那个表往外查
反向---->关联字段不在那个表,从那个表往外查
正向 查询红楼梦这本书的出版社邮箱
# book=Book.objects.filter(name='红楼梦').first()
# pulish=book.publish 就是出版社对象
# print(pulish.email)
反向 查询地址是北京 的出版社出版的图书
# publish=Publish.objects.filter(addr='北京').first()
# books=publish.book_set.all() 拿出所有的图书
统计一下条数
# books=publish.book_set.all().count()
# print(books)
1 连表查询
2 一对一双下划线查询
1 正向:按字段,跨表可以在filter,也可以在values中
2 反向:按表名小写,跨表可以在filter,也可以在values中
查询lqz的手机号
Author.objects.filter(name='lqz').values('authordetail__phone')
AuthorDetail.object.filter(author__name='lqz').values('phone')5 聚合查询
3 聚合函数
from django.db.models import Avg,Count,Max,Min,Sum #(平均,统计数量,最大,最小,求和)
# 计算所有图书的平均价格
# ret=Book.objects.all().aggregate(Avg('price'))
# print(ret)
4 分组查询
终极总结:
values在前,表示group by,在后,表示取值
filter在前,表示过滤(where),在后,表示having(对分组之后的结果再进行过滤)
六 补充
1 F查询与Q查询
F为了字段=后面的值,不能放字段,所以用F函数包裹一下就可以了
Q为了构造与&,或|,非~的关系
2 常用字段:必须记住,非常用字段,了解即可
3 orm字段参数:
null 可以为空
unique 唯一性约束
default 默认值
db_index 为该字段建索引
只给日期类型和时间类型用
auto_now_add 新增数据时,默认把当前时间存入
auto_now 修改的时候,默认把当前时间存入
4 关系字段
ForeignKey
-to 关联哪个表
-to_field 关联的字段
-related_name 反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。(一般不要用)
-related_query_name :基于双下划线的反向查询之前按表名小写(一般不要用)
-on_delete:models.CASCADE,models.SET_NULL
-db_constraint:db_constraint=False代表,不做外键关联
Django基础模型层(77-78)的更多相关文章
- 64、django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- django之模型层(model)--建表、查询、删除基础
要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...
- Django基础(2)--模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介
没整理完 昨日回顾: 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 ...
- Django之模型层(2)
Django之模型层(2) 一.创建模型 实例:我们来假定下面这些概念,字段和关系. 作者模型:一个作者由姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情 ...
- Django之模型层:表操作
目录 Django之模型层:表操作 一.ORM简介 django测试环境搭建 Django终端打印SQL语句 二 单表操作 2.1 按步骤创建表 2.2记录 三.多表操作 1 创建模型 2 添加.删除 ...
- Django之模型层第一篇:单表操作
Django之模型层第一篇:单表操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数 ...
- Django之模型层第二篇:多表操作
Django之模型层第二篇:多表操作 一 表关系回顾 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息 ...
- 67、django之模型层(model)--查询补充及mookie
本篇导航: F查询与Q查询 cookie 一.F查询与Q查询 1.以Book表为例 class Book(models.Model) : title = models.CharField(max_le ...
- 【Django】模型层说明
[Django模型层] 之前大概介绍Django的文章居然写了两篇..这篇是重点关注了Django的模型层来进行学习. ■ 模型定义 众所周知,Django中的模型定义就是定义一个类,其基本结构是这样 ...
随机推荐
- react native onEndReached频繁多次调用问题
今天被这个问题搞得头疼,写一个分页加载,但是listview的onEndReached方法老是被频繁调用,知道加载完所有的分页数据才停止. <ListView automaticallyAdju ...
- python 7
一.数据类型的补充 1.元组 tu1 = ('大海') tu2 = ('大海',) print(tu1, type(tu1), tu2, type(tu2)) 大海 <class 'str'&g ...
- 我对CSS的认识
花费了一段时间,终于对HTML有了一定的了解,随后又开始进行CSS的战斗感觉自己学起来有一点吃力.我就简单的讲一下我所学到的吧! CSS的概述. 层叠式样式表,用于控制网页样式并允许将样式信息并允许将 ...
- js·逻辑运算
|| 遇到第一个为真就返回 && 遇到第一个为假就终止,返回false,如果没遇到就返回最后那一个 5&&4&&2&&1 ==> ...
- Python变量和常量
1.什么是变量 变量:核心在于变和量儿字,变->变化,量->状态如何定义? x=1 变量名 变量赋值符号:= 变量值:1 其中变量名又称为标识符: 1. 可以是字母,数字,下划线的任意组合 ...
- viewport定义,弹性布局,响应式布局及LESS和SASS框架应用
一,移动端宽度设置 viewport视图窗口,<meta name="viewport" content="width=device-width,initial-s ...
- Python练习四
1.任意输入一串文字加数字,统计出数字的个数,数字相连的视为一个,如:12fd2表示两个数字,即12为一个数字. content = input("请输入内容:") for i i ...
- 巡风配置安装 –centOS6.5
巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表. 其主体分为两部分:网络资产识别引擎,漏 ...
- 软件可维护性的影响因素&如何提升
影响因素: 1.可理解性 2.可测试性 3.可修改性 4.可移植性 5.可重用性 如何提升: 1.建立明确的软件质量目标2.使用先进的软件开发技术和工具3.建立明确的质量保证4.选择可维护的语言5.改 ...
- TensorFlow - 在 windows 系统上安装
安装方式: 1.pip (将介绍) 2.Anaconda 我采用的是本地 pip 方式 需提前安装 Python - Python 3.5.x > TF 只支持 Python 3.5.x 版本, ...