ORM基础2 字段及其参数和meta
一、ORM简介
1、概念:ORM(Object Relational Mappingt ),对象关系映射
2、实质:类与数据库之间的映射
3、优点:
开发人员不用写数据库
4、缺点:
开发人员,数据库的技能丢失
类->SQL语句,需要时间,降低效率
二、字段
1、常用字段
a、AutoField
int自增,必须要填入字段参数primary_key=True,若没有这个字段,则自动创建id的列
b、IntegerField
整数类型,范围:-2147483648 ~ 2147483647
c、CharField
varchar(),必须填入字段参数max_length
d、DateField
年月日,datatime模块中的datatime.data()
字段:auto_now 和auto_now_add
时间格式:YYYY-MM-DD
e、DataTimeField
时间格式:YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],datatime.datatime
不重要字段
BigAutoField(AutoField)
- bigint自增列,必须填入参数 primary_key=True SmallIntegerField(IntegerField):
- 小整数 -32768 ~ 32767 PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正小整数 0 ~ 32767
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正整数 0 ~ 2147483647 BigIntegerField(IntegerField):
- 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807 BooleanField(Field)
- 布尔值类型 NullBooleanField(Field):
- 可以为空的布尔值 TextField(Field)
- 文本类型 EmailField(CharField):
- 字符串类型,Django Admin以及ModelForm中提供验证机制 IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both" URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号) CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字 UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
path, 文件夹路径
match=None, 正则匹配
recursive=False, 递归下面的文件夹
allow_files=True, 允许文件
allow_folders=False, 允许文件夹 FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None, 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串) TimeField(DateTimeCheckMixin, Field)
- 时间格式 HH:MM[:ss[.uuuuuu]] DurationField(Field)
- 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型 FloatField(Field)
- 浮点型 DecimalField(Field)
- 10进制小数
- 参数:
max_digits,小数总长度
decimal_places,小数位长度 BinaryField(Field)
- 二进制类型
自定义char类型的字段
class FixedCharField(models.Field):
def __init__(self, max_length, *args, **kwargs):
super().__init__(max_length=max_length, *args, **kwargs)
self.length = max_length def db_type(self, connection):
# 限定生成数据库表的字段类型为char,长度为length指定的值
return 'char(%s)' % self.length class Class(models.Model):
# 使用自定义的char类型的字段
name = FixedCharField(max_length=25)
三、字段参数
1、null
为空, null=True
2、unique
唯一索引,含有unique=True
3、db_index
索引,含有索引:db_index=True
4、default
设置默认值
5、auto_now_add和auto_now的区别
a、不能同时为True
b、auto_now_add 数据创建后的时间更新
c、atuo_now 修改数据的时间更新
注意:DateField 和 DateTimeField字段有auto_now_add 参数,不需要设置具体的值
四、关系字段
1、外键(一般公司不会使用)
字段:ForeignKey
字段参数
a、to
设置要关联的表
b、to_field
设置要关联的表的字段(一般不设置,默认使用主键id关联)
设置要关联表的字段,可以和to一起使用
c、db_constraint
设置软约束,db_constraint=False,一般公司不用外键,如果用也是软约束
d、on_delete
当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE
删除关联数据,与之关联也删除
models.DO_NOTHING
删除关联数据,引发错误IntegrityError
models.PROTECT
删除关联数据,引发错误ProtectedError
models.SET_NULL
删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
models.SET_DEFAULT
删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
models.SET
删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
注意:Django2要写on_delete =models.CASCADE
2、一对一
一个表变成两个表,优点根据查询的频率,分表
字段:OneToOneField
参数:
a、to
b、to_field
c、on_delete
3、多对多
字段:ManyToManyField
字段参数:to
五、元信息
在元类中的字段:Meta
db_table:ORM在数据库中的表名默认是app_类名,可以通过db_table来设置
index_together:联合索引
unique_together:联合唯一索引 ****** many2many 指定第三张表,第三张表的两个外键要做唯一联合索引
ordering:指定默认按什么字段排序
verbose_name_plural 使用admin添加数据,在admin上,显示复数 后面不加 s
verbose_name 使用admin添加数据时,在admin上显示单数,后面加s
注意:后面是tuple
ORM基础2 字段及其参数和meta的更多相关文章
- ORM基础之字段及其参数介绍
一.外键ForeignKey 1.字段参数 1.to 设置要关联的表 2.to_field 设置要关联的表的字段(一般不设置,默认使用主键id关联) 3.related_name 反向操作时,使用的字 ...
- Django中ORM介绍和字段及其参数
ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...
- day07 ORM中常用字段和参数
day07 ORM中常用字段和参数 今日内容 常用字段 关联字段 测试环境准备 查询关键字 查看ORM内部SQL语句 神奇的双下划线查询 多表查询前提准备 常用字段 字段类型 AutoField in ...
- ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化
聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...
- Django ORM中常用字段和参数
一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...
- django orm介绍以及字段和参数
Object Relational Mapping (ORM) orm介绍 orm概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数 ...
- Django --ORM常用的字段和参数 多对多创建形式
1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...
- Django ORM常用的字段和参数
ORM 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类 ...
- Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法
Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法 一丶ORM常用字段 ...
随机推荐
- Aizu 0531 "Paint Color" (坐标离散化+DFS or BFS)
传送门 题目描述: 为了宣传信息竞赛,要在长方形的三合板上喷油漆来制作招牌. 三合板上不需要涂色的部分预先贴好了护板. 被护板隔开的区域要涂上不同的颜色,比如上图就应该涂上5种颜色. 请编写一个程序计 ...
- P1040 快速幂取模
题目描述 给你三个正整数a,b,m,请你求出 \(a^b \bmod m\) 的结果. 输入格式 一行三个整数 \(a,b,m(1 \le a,b,m \le 10^9)\) . 输出格式 一个整数, ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(3)之创建实体层
实体层是介于表现层和业务层之间,同时也作为数据载体贯穿了整个项目之间的数据传递,创建实体有很多方法,我们可以手工创建,也可以代码生成引擎等等,我们这里主要应用数据实体模型连接生成: 创建好之后,我们需 ...
- springboot-aop日志打印
package com.cinc.ecmp.client; import com.cinc.ecmp.enums.BackResultEnum; import com.cinc.ecmp.except ...
- Linux 内核热插拔事件产生
一个热插拔事件是一个从内核到用户空间的通知, 在系统配置中有事情已经改变. 无论何 时一个 kobject 被创建或销毁就产生它们. 这样事件被产生, 例如, 当一个数字摄像头 使用一个 USB 线缆 ...
- 基于vs2015 SignalR开发的微信小程序使用websocket实现聊天功能
一)前言 在微信小程上实现聊天功能,大致有三种方式:1)小程序云开发 2)购买第三方IM服务 3)使用自己的服务器自己开发. 这里重要讲使用自己的服务器自己开发,并且是基于vs的开发. 网上提供的解决 ...
- boostrap-非常好用但是容易让人忽略的地方【4】:Font Awesome
font-awesome基本用法 官方代码传送门 font-awesome在bootstrap中的特殊用法(这个才是重点) 要点归纳1(官方) 官方代码传送门 要点归纳2(我的) <a href ...
- lnmp一键安装,安装php时失败
查看安装日志 直接cd进入根目录报错内容:configure: error: mcrypt.h not found. Please reinstall libmcrypt 解决办法如下#使用wget可 ...
- 解析crash
命令行 1.查找 symbolicatecrash find /Applications/Xcode.app -name symbolicatecrash -type f 2.此时会出现一个路径 sy ...
- 【抖音测试开发日常实习】一二三四面面经,攒人品求Offer
总结: 一.流程 (估计)一面二面技术leader面,三面部门领导面,四面肯定是HR面 二.系统 用的牛客网面试系统,长相大概是这样: 打字聊天框我在听不清对面声音的时候用过,感觉没啥卵用,手撕代 ...