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反向生成之前,我们先说一下怎么 ...
随机推荐
- git本机服务器配置(三):Gitblit的安装
1. 下载 http://www.gitblit.com/ 2. 解压下载文件 3. 配置信息 3.1 需要提前配置好java jdk环境 3.2 打开data目录下的defaults.propert ...
- Java 多线程 - 生产者消费者问题
https://www.cnblogs.com/hckblogs/p/7858545.html
- Tomcat实现反向代理
实验环境搭建: web server Director: 192.168.11.131(host-only) 192.168.1.114(桥接) 安装好Apache ...
- Sping 里面的适配器模式的实现
适配器模式----------设计模式最近在看SpringMVC源码,从中看到了比较优秀的设计模式所以来分享下. 1.适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,Adap ...
- Ansible运维自动化工具19个常用模块使用实例【转】
一.模块列表 1.setup 2.ping 3.file 4.copy 5.command 6.shell 7.script 8.cron 9.yum 10.service 11.group 12.u ...
- C#使用RabbitMQ(转)
1. 说明 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地 ...
- curl常用命令备忘
#####(输出请求头信息) curl -I xxx-Pro:test xxx$ curl -I https://www.baidu.com/ HTTP/1.1 200 OK Accept-Range ...
- spring boot 集成axis1.4 java.lang.NoClassDefFoundError: Could not initialize class org.apache.axis.client.AxisClient
pom配置: <dependencies> <dependency> <groupId>org.springframework.boot</groupId&g ...
- 在Windows Server2016中安装SQL Server2016
SQL Server2016安装硬.软件条件:点击打开链接 WinServer2016的安装参见: 在虚拟机中安装Windows Server2016 1. SQL Server2016下载地址: - ...
- linux 搭建ftp服务并设置限制访问目录
服务器有好几个项目,新项目前端外包,因为要微信授权登陆,所以前端没有办法本地调试,必须上次ftp在我们服务器上调试代码,当然要限制ftp访问的目录,否则整个服务器项目都能看到了. 安装vsftpd s ...