Django ORM 知识概要
- 相关命令
python3 manage.py makemigrations
根据模型生成相关迁移文件python3 manage.py migrate
根据迁移文件,将表结构更新到数据库中,并在Django中带的migrations数据表中更改数据库记录
- 字段
- 常用的字段
- 自增长字段
- models.AutoField()
- models.BigAutoField()
- 二进制数据
- models.BinaryField()
- 布尔型
- 允许为空 models.BooleanField()
- 不允许为空 models.NullBooleanField()
- 整型
- 5个字节的正整数models.PositiveSmallIntegerField()
- 6个字节的整数
models.SmallIntegerField() - 11个字节的整数
models.IntegerField() - 20个字节的整数
models.BigIntegerField()
- 字符串类型
- varchar
models.CharField(max\_length=100) - longtext
models.TextField()
- varchar
- 时间日期类型
- 年月日
models.DateField() - 年月日时分秒
models.DateTimeField() - 一段时间,在数据库中是int类型,底层是 Python timedelta 实现
models.DurationField()
- 年月日
- 浮点型
- models.FloatField()
- 可以指定整数多少位,小数多少位
models.DecimalField()
- 其它字段
- 邮箱
models.EmailField() - models.ImageField()
- models.FileField()
- models.FilePathField()
- models.URLField()
- models.UUIDField()
- IP地址,可以是IPV4,也可以是IPV6
models.GenericIPAddressField()
- 邮箱
- 自增长字段
- 关系型字段
- 一对一
models.OneToOneField(Model) - 多对一
models.ForeignKey(Model) - 多对多
models.ManyToManyField(Model)
- 一对一
- 字段类型参数
- 所有字段都有的参数
- db_column='name'
- primary_key=True
- verbose_name='别名或者注释'
- unique=True
- null=True,blank=True
- db_index=True 给表单建立索引
- help_text='' 表单中显示帮助信息
- editable=False 表单不可编辑
- 个别字段才有的参数
- 给CharField 指定最大长度 max_length=100
- 时间
- unique_for_date=True
- unique_for_month=True
- auto_now=True 更新时间
- auto_now_add=True 新增时间
- 浮点型 Decimal
- max_digits=4 表示一共有多少位数
- decimal_places=2 表示小数有多少位
- 关系型字段的参数
- related_name='name' 反向查询时候可能会用到
- on_delete=value
value的值- CASCADE:删除引用的对象时,也删除引用它的对象
- PROTECT:禁止删除引用的对象。SQL等价物:RESTRICT。
- SET_NULL:将引用设置为NULL(要求字段可以为空),当字段设置null=True才可以使用
- SET_DEFAULT:设置默认值。只有当字段设置了default参数时才能使用 SQL等价物:SET DEFAULT。
- SET(value 或者 函数返回值):设置给定值。这个不是SQL标准的一部分,完全由Django处理。
- DO_NOTHING:SQL等价物:NO ACTION。
- 自关联
- 写法一:
modles.ForeignKey('self',verbose_name='自关联') - 写法二:
modles.ForeignKey('Model',verbose_name='自关联')
- 写法一:
- 所有字段都有的参数
- 常用的字段
- 元数据,Meta类定义了一些元数据的信息,Meta类的字段如下:
- db_table
- ordering 列表或者元组形式
- verbose_name 别名
- verbose_name_plural 别名复数
- abstract 不同步到数据库,只是用于被别的类继承
- permissions 定义权限
- managed 是否按照Django规则管理模型类 默认是True
- unique_together=()/((),()) 对应MySQL中的联合唯一约束
- app_label 指定模型属于哪个应用(如果在settings里面已经注册过应用的话,就不用写这个字段了)
- db_tablespace 定义数据库表空间的名字
- Django 数据表操作
- 更改数据表
- 删除数据库表步骤
- 删除对应的模型类代码
- 删除migrationd文件夹下面的模型类
- 删除Django的migrations表中对应的记录
- 删除数据库表
- 删除数据库表步骤
- 导入数据
- Django shell 导入数据 引入模型 调用模型对象的save方法
- 自己定义一个脚本批量导入数据
- fixtures Django serialization -> model 保存
- python3 manage.py dumpdata > data.json
- python3 manage.py loaddata data.json
- 通过数据库客户端或则source文件导入数据
- 导出数据
- python3 manage.py dumpdata > data.json
- pycharm 导出
- mysqldump 导出
- 数据操作
- 返回QuerySet 的 API
- all(),filter(),order_by(),exclude(),reverse(),distinct()
- extra(),defer(),only() 实现字段别名,排除一些字段,选择一些字段
- values(),values_list() 获取字典或者元组形式的结果集
- dates(),datetimes() 根据时间日期获取查询集
- union(),intersection(),difference() 并集,交集,差集;MySQL Innodb 只支持并集
- select_related() 一对一、多对一查询优化,prefetch_related() 一对多、多对多查询优化。 反向查询
- annotate() 使用聚合计数,求和,平均数,raw() 执行原生SQL
annotate()对分组后的结果进行统计 - Model.objects.get().子表的表名 _set.all()
- 不返回QuerySet 的 API
- 获取对象 get(),get_or_create(),first(),last(),latest(),earliest(),in_bulk()
- 创建对象 create(),bulk_create(),create_or_update() 创建,批量创建,创建或更新
- 更新对象 update(),update_or_create() 更新,更新或创建
- 删除对象 delete() 使用filter 过滤
- 其它操作 exists(),count(),aggregate() 判断是否存在,统计个数,聚合
aggregate() 是对这个数据表中的数据进行统计
- 自定义聚合查询
- 返回QuerySet 的 API
- F对象和Q对象
- F对象:操作字段的数据
- Q对象:结合 AND , OR ,NOT, | , ~ , & 实现复杂的查询
- 更改数据表
注: 本文知识点是根据自己的项目经验及慕课网的教学视频整理所得,
如需转载请注明出处:https://www.cnblogs.com/zhuchenglin/p/10223596.html
Django ORM 知识概要的更多相关文章
- django基础知识
一.django的安装 1. pip3 install django 2. 把安装路径加到环境变量里以便以后启动admin相关命令,在windows系统中---我的电脑---属性----高级系统设置- ...
- Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作
静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...
- django orm总结[转载]
django orm总结[转载] 转载地址: http://www.cnblogs.com/linjiqin/archive/2014/07/01/3817954.html 目录1.1.1 生成查询1 ...
- Django ORM - 001 - 外键表查询主表信息
开始用Django做web开发,我想大家都会遇到同样的问题,那就是如何高效快速的查询需要的数据,MVC都很简单,但是ORM折腾起来就有些费时间,我准备好好研究下Django ORM,所以会有一个系列的 ...
- Django ORM 中的批量操作
Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作.但在Django的ORM中的批量操作却要完美得多,真是一个惊喜. 数据模型定义 首先,定 ...
- Django ORM 查询管理器
Django ORM 查询管理器 ORM 查询管理器 对于 ORM 定义: 对象关系映射, Object Relational Mapping, ORM, 是一种程序设计技术,用于实现面向对象编程语言 ...
- Django 基础知识
Django Models django 本身提供了非常强大易使用的ORM组件,并且支持多种数据库,如sqllite,mysql,progressSql,Oracle等,当然最常用的搭配还是mysql ...
- Django ORM模型的一点体会
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...
- 数据库表反向生成(二) Django ORM inspectdb
在前一篇我们说了,mybatis-generator反向生成代码. 这里我们开始说如何在django中反向生成mysql model代码. 我们在展示django ORM反向生成之前,我们先说一下怎么 ...
随机推荐
- 使用nc传输文件和目录【转】
方法1,传输文件演示(先启动接收命令) 使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了 把A机器上的一个rpm文件发送到B机器上 需注意操作次序,receiver先侦听 ...
- 设计模式 — 抽象工厂模式(Abstract Factory)
工厂模式已经分析了简单工厂模式和工厂方法模式.并且了解了工厂方法模式去简单工厂模式的延伸,工厂方法模式如果不把工厂类抽象的话,就是简单工厂模式.由前面两个工厂模式可以猜测出抽象工厂模式应该是这两种工厂 ...
- iOS开发之常用路径及文件操作方法
一.常用的路径方法 1.获取AppName.app 目录路径: NSString *path = [[NSBundle mainBundle] bundlePath]; 2.获取Documents目录 ...
- UML示例图 zt
UML示例图 在Visio里,包和类的关系是包含关系,将类拖入包的文件夹之后,关系就建立了,二元关联符号可以设置为:聚合.合成.接口:空心圆+直线(唐老鸭类实现了'讲人话’):依赖:虚线+箭头(动 ...
- Angular动画
Angular动画基于W3C的Web Animations标准.不在Angular Core中了. 组件里面定义一个或多个触发器trigger,每个触发器有一系列的状态和过渡效果来实现. 动画其实就是 ...
- tensorflow RNN循环神经网络 (分类例子)-【老鱼学tensorflow】
之前我们学习过用CNN(卷积神经网络)来识别手写字,在CNN中是把图片看成了二维矩阵,然后在二维矩阵中堆叠高度值来进行识别. 而在RNN中增添了时间的维度,因为我们会发现有些图片或者语言或语音等会在时 ...
- flink学习
flink介绍: Apache Flink is an open source platform for distributed stream and batch data processing. F ...
- HTML5+CSS3 1
html5标准模板 <!DOCTYPE html> //<!DOCTYPE>标签 向浏览器声明当前文档使用的HTML版本,<!DOCTYPE html>适用于所 ...
- java中的static代码块为什么只执行一次
原因在最后,这是其中的一个小例子. 如: SessionFactory负责保存和使用所有配置信息,消耗内存资源非常大 所以一个web项目要保证只创建一个SessionFactory 那么在使用hibe ...
- c++之STL容器删除元素
1.删除容器中特定值的元素 如果是容器vector,string,,deque,使用erase-remove 例如:erase-remove 注:因为container没有remove,contain ...