python mysql自增字段AUTO_INCREMENT值的修改方式


Posted in Python onMay 18, 2020

在之前得文章中我们说过,如果使用delete对数据库中得表进行删除,那么只是把记录删除掉,并且id的值还会保持上次的状态。

即删除之前如果有四条数据,删除之后,再添加新的数据,id怎会从5开始。

但是我们显示想让id从2开始,应该怎么做呢?

这个时候我们就要学习去修改数据表的一些属性值了,而这个属性值就是AUTO_INCREMENT。

首先我们要知道怎么查看这个属性的值。

例如我建了一张表:

create table t4(id int auto_increment primary key, num int) engine=innodb default charset=utf8;

那么接下来我可以通过命令来查看AUTO_INCREMENT的值:

python mysql自增字段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;来验证一下。

python mysql自增字段AUTO_INCREMENT值的修改方式

此时我们可以找到AUTO_INCREMENT这个属性,并且它的值等于4,这个是不是就是说明AUTO_INCREMENT记录的值表示对于下一条记录的id值。

通过delete table t4; 来把t4里面的记录清空。

然后再调用show create table t4 \G;命令

python mysql自增字段AUTO_INCREMENT值的修改方式

可以发现表的信息并没有因为表里的信息被删除而改变,这样的话,我们要是想让添加的数据id从2开始不就会不行了吗?

but,我们可以修改表的信息。

通过alter table t4 AUTO_INCREMENT=2;这个命令我们可以修改AUTO_INCREMENT属性的值,将其修改为2,那么我们再添加数据,id不就从2开始了嘛。

最后,我们在验证一下

python mysql自增字段AUTO_INCREMENT值的修改方式

返现结果如我们要的一样,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_key=True, default=uuid.uuid4, db_column='c_id')
  company_seal = models.OneToOneField(CompanySeal, verbose_name='企业印章id', null=True,
                    db_column='c_company_seal_id')
  add_by_id = models.UUIDField(verbose_name='添加人id', db_column='c_add_by_id', null=True, default=None)
  add_dt = models.DateTimeField('添加时间', db_column='c_add_dt', auto_now_add=True)
  
  class Meta:
    db_table = 't_company_auth_record'
    verbose_name = '企业认证状态记录表'
    # abstract = True
    ordering = ["add_dt"]
    default_permissions = ()

附关于abstract=True的官方解释:

python mysql自增字段AUTO_INCREMENT值的修改方式

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_key=True, default=uuid.uuid4, db_column='c_id')
  add_by_id = models.UUIDField(verbose_name=u'添加人id', db_column='c_add_by_id', null=True, default=None)
  add_dt = models.DateTimeField(verbose_name=u'添加时间', db_column='c_add_dt', auto_now_add=True)

  class Meta:
    # app_label = 'seal'
    db_table = 't_company_seal'
    verbose_name = '企业电子印章数据表'
    ordering = ["add_dt"]
    default_permissions = ()

以上经验希望能帮到出现同样问题的你,问题其实本身不算问题,只怪我们太low,多看文档和源码才是提升之道。附关于Meta属性文档链接。希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
django2 快速安装指南分享
Jan 05 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
Python 经典面试题 21 道【不可错过】
Sep 21 Python
python用插值法绘制平滑曲线
Feb 19 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
在主流系统之上安装Pygame的方法
May 20 Python
pytorch中的model.eval()和BN层的使用
May 22 Python
Pycharm安装并配置jupyter notebook的实现
May 18 #Python
Django中的AutoField字段使用
May 18 #Python
jupyter notebook运行命令显示[*](解决办法)
May 18 #Python
jupyter notebook的安装与使用详解
May 18 #Python
Python读取JSON数据操作实例解析
May 18 #Python
基于django 的orm中非主键自增的实现方式
May 18 #Python
Mysql数据库反向生成Django里面的models指令方式
May 18 #Python
You might like
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
Bootstrap CSS组件之导航条(navbar)
2016/12/17 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
Python实现一个简单的MySQL类
2015/01/07 Python
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
深入浅析Python传值与传址
2018/07/10 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
Django的性能优化实现解析
2019/07/30 Python
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
学生周末长期请假条
2014/02/15 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
碧霞祠导游词
2015/02/09 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python