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 中的多线程 新手必看
Nov 20 Python
Python面向对象编程基础解析(一)
Oct 26 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
May 11 Python
Python能做什么
Jun 02 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
python 监控logcat关键字功能
Sep 04 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
PYTHON InceptionV3模型的复现详解
May 06 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中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
php常用图片处理类
2016/03/16 PHP
php微信开发自定义菜单
2016/08/27 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
python实现合并两个数组的方法
2015/05/16 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python正则表达式面试题解答
2020/04/28 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
.net面试题
2016/09/17 面试题
元旦联欢会主持词
2014/03/26 职场文书
公司承诺书怎么写
2014/05/24 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang