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反向生成之前,我们先说一下怎么 ...
随机推荐
- /usr/bin/ld: warning: libavformat.so.57, needed by /home/camera.so, not found (try using -rpath or -rpath-link)
ffmpeg中,使用libavformt.so.57时,查找不到. 解决方案: 修改ld.so.conf文件,添加路径. sudo gedit /etc/ld.so.conf 在文件末尾添加路径 /u ...
- 推荐前端开发手机调试打印神器console.log()
下面说的这个插件很牛,相信很多人都不知道,但找问题的时候很需要,直接上干货如下: vConsole:一个轻量.可拓展.针对手机网页的前端开发者调试面板. 下载 vConsole 的最新版本.(不要直接 ...
- JAVA 封装的简单运用
package Code425;class person{ private String name ; String place; String school; String habits; int ...
- BaiduMap路程计算
#BaiduMap路程计算def getDistance(deslat,deslng,originlat,originlng): url='http://api.map.baidu.com/direc ...
- python2 使用pip安装psycopg2出现错误:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-mvzdNj/psycopg2/
公司业务需求,开发语言python2,需要使用数据库:postgresql,需要安装模块psycopg2这个模块, 使用pip install psycopg2 报错: Command "p ...
- 04-HTTP协议和静态Web服务器
一.HTTP协议(HyperText Transfer Protocol) 超文本传输协议,超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片.音乐.视频.超链接等等都属于超文本. ...
- python+selenium自动测试之WebDriver的常用API(基础篇二)
本篇介绍一下python+selenium复杂操作的处理,基于python3.6,selenium3.141,详细资料介绍查看官方API文档,点击这里 一.常见特殊情况处理如iframe/弹窗处理 有 ...
- Linux tar命令之--exclude参数 排除指定的文件或目录
https://my.oschina.net/u/3285916/blog/1632552 参数: --exclude 打包时排除不需要处理的文件或目录 说明: tar -zcf a.tar.gz 打 ...
- C# FTP下载图片转为Base64
public string GetFtpBase64String(string FtpFilePath) { try { string sBase64String = string.Empty; Ft ...
- jdbc crud
最近在做一个mybatis的sql审计,所有需要原生的使用一下jdbc,基于次,复习一下自己的基础知识 github 地址: https://github.com/warriorg/nodes/tre ...