为什么不用原来的网站做推广,创造与魔法官方网站-做自己喜欢的事,移动网站怎么建设,名词解释 网站内容在之前得文章中我们说过#xff0c;如果使用delete对数据库中得表进行删除#xff0c;那么只是把记录删除掉#xff0c;并且id的值还会保持上次的状态。
即删除之前如果有四条数据#xff0c;删除之后#xff0c;再添加新的数据#xff0c;id怎会从5开始。
但是我们显示想…在之前得文章中我们说过如果使用delete对数据库中得表进行删除那么只是把记录删除掉并且id的值还会保持上次的状态。
即删除之前如果有四条数据删除之后再添加新的数据id怎会从5开始。
但是我们显示想让id从2开始应该怎么做呢
这个时候我们就要学习去修改数据表的一些属性值了而这个属性值就是AUTO_INCREMENT。
首先我们要知道怎么查看这个属性的值。
例如我建了一张表
create table t4(id int auto_increment primary key, num int) engineinnodb default charsetutf8;
那么接下来我可以通过命令来查看AUTO_INCREMENT的值通过命令我们好像没找到这个AUTO_INCREMENT属性啊why这是因为我们刚建好表还没有数据所以这个属性还没开始被赋值。
那么我们就插入几条数据
insert into t4(num) values(11);
insert into t4(num) values(12);
insert into t4(num) values(13);
通过上面的sql语句插入三条记录。
在这里我们可以猜想一下AUTO_INCREMENT属性的值应该是表示的什么是记录最后记录的数据是第几条还是表示下一条记录是第几条
我们可以再次通过命令 show create table t4 \G;来验证一下。此时我们可以找到AUTO_INCREMENT这个属性并且它的值等于4这个是不是就是说明AUTO_INCREMENT记录的值表示对于下一条记录的id值。
通过delete table t4; 来把t4里面的记录清空。
然后再调用show create table t4 \G;命令可以发现表的信息并没有因为表里的信息被删除而改变这样的话我们要是想让添加的数据id从2开始不就会不行了吗
but我们可以修改表的信息。
通过alter table t4 AUTO_INCREMENT2;这个命令我们可以修改AUTO_INCREMENT属性的值将其修改为2那么我们再添加数据id不就从2开始了嘛。
最后我们在验证一下返现结果如我们要的一样ok完美解决。
补充知识django 中model踩的坑之AttributeError: type object ** has no attribute objects及Field defines a relation
django 中model踩的坑之AttributeError: type object ** has no attribute objects及Field defines a relation with model **, which is either not installed, or is abstract.
1. AttributeError: type object ** has no attribute ‘objects
作者目前使用的是django1.8.1版本在一次新项目的启动中在编译查询代码的时候如下总是抛出如上错误。有人告诉我那就自己在model中重新引入objects即objects Model.manager()然而问题依然没有得到解决。
queryset CompanyAuthRecord.objects.all()
最后发现原来把abstract True注释掉就可以完美的解决这个问题至于当初为什么会加这一属性好像是在引入此model的时候总是引入不成功也是被别人告诉加入此属性就可以了。事实确实解决那个引入问题然而当初并没有去研究为什么要用他应了那句话欠下的迟早要还
class CompanyAuthRecord(models.Model):
id models.UUIDField(primary_keyTrue, defaultuuid.uuid4, db_columnc_id)
company_seal models.OneToOneField(CompanySeal, verbose_name企业印章id, nullTrue,
db_columnc_company_seal_id)
add_by_id models.UUIDField(verbose_name添加人id, db_columnc_add_by_id, nullTrue, defaultNone)
add_dt models.DateTimeField(添加时间, db_columnc_add_dt, auto_now_addTrue)
class Meta:
db_table t_company_auth_record
verbose_name 企业认证状态记录表
# abstract True
ordering [add_dt]
default_permissions ()
附关于abstractTrue的官方解释2.Field defines a relation with model **, which is either not installed, or is abstract.
解决了上述问题后又有这样的问题出现难道真要上演程序员修水管的景象几经周折原因又出现在被关联model的app_lable seal属性上如下注释即可解决问题。至于原因django要求是这样的你可以不设置这个参数如果要设置请与你的app名称保持一致。而我就是犯了这样的错误。
class CompanySeal(models.Model):
id models.UUIDField(primary_keyTrue, defaultuuid.uuid4, db_columnc_id)
add_by_id models.UUIDField(verbose_nameu添加人id, db_columnc_add_by_id, nullTrue, defaultNone)
add_dt models.DateTimeField(verbose_nameu添加时间, db_columnc_add_dt, auto_now_addTrue)
class Meta:
# app_label seal
db_table t_company_seal
verbose_name 企业电子印章数据表
ordering [add_dt]
default_permissions ()
以上经验希望能帮到出现同样问题的你问题其实本身不算问题只怪我们太low多看文档和源码才是提升之道。附关于Meta属性文档链接。希望能给大家一个参考也希望大家多多支持脚本之家。