【Django是一个机智的框架】
默认情况下Djang会为ORM中定义的每一张表加上一个自增ID列,并且用这个列来做主键;出于一个MySQL-DBA的工作经历我觉得
Djanog还真是机智;这样么说主要是因为我遇到过许多主从延时的问题,有些比较过分的会延时好几周,通常这些都是因为binlog格式
为“ROW”但是表上不存在主键引起的。
如果当前网站用的是Django开发的,我想就不会有这种事情发生了吧。
【AutoField】
Django默认的行为就像这样
class TestModel(models.Model):
id = models.AutoField(primary_key=True)
数据库层面对应的SQL如下
CREATE TABLE `myapp_testmodel` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
【注意】
如果你想的工增加AutoField列,但是又不指定这个列做为主键的话,是会报错的
class TestModel(models.Model):
tid = models.AutoField()
不显示指定主键,但是又给表增加AutoField列的话就会报错
assert not cls._meta.auto_field, "Model %s can't have more than one AutoField." % cls._meta.label
AssertionError: Model myapp.TestModel can't have more than one AutoField.
补充知识:Django中models下常用Field以及字段参数
一、常见的FieldType数据库字段类型
1、AutoField:自增Field域,自动增加的一个数据库字段类型,例如id字段就可以使用该数据类型,参数中必须填入primary_key=True
2、BigAutoField:和AutoField相同,只是比AutoField要大,参数中必须填入primary_key=True
3、BigIntegerField:大整型,只要用于存储整型的数据
4、BinaryField:主要是存储原始的二进制数据
5、BooleanField:主要是存储布尔类型的数据,0和1
6、CharField:主要存储字符串的数据类型
7、DateField:主要存储日期类型的数据类型,日期格式为YYYY-MM-DD
8、DateTimeField:主要存储时间相关的数据类型,格式为YYYY-MM-DD HH:MM:[ss[.uuuuuu]][TZ]
注意:DateField与DateTimeField有两个属性,配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库,配置auto_now=True,每次更新数据记录的时候都会更新该字段
9、DecimalField:主要存储固定精度的十进制数据
--参数:max_digits(小数总长度)/decimal_places(小数位长度)
10、EmailField:存储电子邮件格式的数据,Django Admin以及ModelForm中提供验证机制
11、FileField:存储文件类型的数据,文件上传到指定目录
--参数:upload_to="...."(上传文件的保存路径)/storage=None(存储组件,默认django.core.files.storage.FileSystemStorage)
12、FilePathField:存储文件路径的数据,提供读取文件夹下文件的功能
--参数:path(文件夹路径)/match=None(正则匹配)/recursive=False(递归下面的文件夹)/allow_files=True(允许文件)/allow_folders=False(允许文件夹)
13、FloatField:存储浮点型数据
14、ImageField:存储图片型数据,文件上传到指定目录
--参数:upload_to="....."(上传文件的保存路径)/storage=None(存储组件,默认django.core.files.storage.FileSystemStorage)/width_field=None(上传图片的宽度保存的数据库字段名<字符串>)/height_field=None(上传图片的高度保存的数据库字段名<字符串>)
15、IntegerField:存储整型数据
16、GenericIPAddressField:存储IP地址信息数据
17、NullBooleanField:可以存储布尔值数据,也可以存储空null数据
18、PositiveIntegerField:主要存储正整数数据
19、SmallIntegerField:小整型,主要用于存储整型的数据
20、TextField:存储文章内容信息数据,存储比较长的文本信息
21、TimeField:存储时间信息
22、URLField:存储URL网址信息,Django Admin以及ModelForm中提供验证url
23、IPAddressField:Django Admin以及ModelForm中提供验证IPV4机制
24、GenericIPAddressField:Django Admin以及ModelForm中提供验证IPV4和IPV6机制
二、常用关系型数据表处理Field
1、处理一对多关系数据表:使用ForeignKey
2、处理多对多关系数据表:使用ManyToManyField
三、字段参数
1、null:用于表示某个字段可以为空
2、unique:如果设置为unique=True则该字段在此表中必须是唯一的
3、db_index:如果db_index=True则代表这为此字段设置索引
4、default:为该字段设置默认值
四、关系字段
1、to:设置要关联的表
2、to_field:设置要关联的表的字段
3、related_name:反向操作时,使用的字段名,用于代替原反向查询时的"表名_set"
4、on_delete:当删除关联表中的数据时,当前表与其关联的行的行为,例如删除一个出版社,那么和这个出版社有关联的书籍也都被删除掉了,下面介绍on_delete的参数值:
on_delete=models.CASCADE:删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING:删除关联数据,引发错误IntegrityError
on_delete=models.PROTECT:删除关联数据,引发错误ProtectedError
on_delete=models.SET_NULL:删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
on_delete=models.SET_DEFAULT:删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
on_delete=models.SET:删除关联数据:
a、与之关联的值设置为指定值,设置:models.SET(值)
b、与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
5、db_constraint:是否在数据库中创建外键约束,默认为True,db_constraint一般使用在建立数据表连接关系当中(例如创建外键),如果使用False,则是限制了表之间没有关联,达到了软连接的效果
五、元信息
ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息,主要字段如下:
1、db_table:ORM在数据库中的表名默认为app_类名,可以通过db_table可以重写表名
2、index_together:联合索引,给两列做索引
3、unique_together:联合唯一索引,两列不能重复
4、ordering:指定默认按什么字段顺序,只有设置了该属性,我们查询到的结果才可以被reverse()
具体介绍可以查看https://docs.djangoproject.com/en/dev/ref/models/fields/
以上这篇Django中的AutoField字段使用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星.2003-存为爱2CD【环球】【WAV+CUE】
- 韩磊《试音天碟》高清音频[WAV+CUE]
- 邓涛《寂寞蒲公英(黑胶CD)》[WAV]
- 江志丰.2011-爱你的理由【豪记】【WAV+CUE
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[320K/MP3][140.01MB]
- 群星《传承-太平洋影音45周年纪念版 (CD2)》[FLAC/分轨][293.29MB]
- 首首经典《滚石红人堂I 一人一首成名曲 4CD》[WAV+CUE][2.5G]
- s14上单t0梯度怎么排名 s14世界赛上单t0梯度排行榜
- tes目前进了几次s赛 LPL队伍tes参加全球总决赛次数总览
- 英雄联盟巅峰礼赠什么时候开始 2024巅峰礼赠活动时间介绍
- 冯骥发文谈睡觉重要性 网友打趣:求求你先做DLC
- 博主惊叹《少女前线2》万圣节大雷皮肤:这真能过审吗?
- 《生化危机8》夫人比基尼Mod再引骂战:夸张身材有错吗?
- 江蕙.1994-悲情歌声【点将】【WAV+CUE】
- 戴娆.2006-绽放【易柏文化】【WAV+CUE】