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实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
python hough变换检测直线的实现方法
Jul 12 Python
Pytorch中的variable, tensor与numpy相互转化的方法
Oct 10 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 Python
django 多数据库及分库实现方式
Apr 01 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
Python3+selenium配置常见报错解决方案
Aug 28 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
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
浅析Javascript使用include/require
2013/11/13 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
layui时间控件选择时间范围的实现方法
2019/09/28 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
Python标准库之Sys模块使用详解
2015/05/23 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
python导入模块交叉引用的方法
2019/01/19 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
自考生毕业自我鉴定
2013/10/10 职场文书
北体毕业生求职信
2014/02/28 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
教师个人考察材料
2014/12/16 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
Hive日期格式转换方法总结
2022/06/25 数据库