基于django 的orm中非主键自增的实现方式


Posted in Python onMay 18, 2020

我们知道django的orm想实现自增,可以直接使用AutoField字段既可以实现,但是这种情况必须要求此字段是主键,但是我们知道主键只能是一个。

如果我已经有了一个主键,但是又需要另外一个字段为唯一自增字段,这该如何实现呢?

本人的解决办法如下,供大家参考,也欢迎大家提供更多的实现方式,互相学习。

class ProductSpu(models.Model):
  """
  商品表
  """
  _database = 'payment'

  id = models.UUIDField(primary_key=True, default=uuid.uuid4, db_column='c_id')
  product_no = models.IntegerField('商品号', blank=True, auto_created=True, db_column='c_product_no')
  name = models.CharField(verbose_name='商品名称', max_length=100, db_column='c_name')

如上,product_no字段是我要实现的自增字段,

(1)首先设置此字段为IntegerField类型,并设置属性值auto_created=True;

(2)生成数据库的sql语句设置如下:

CREATE TABLE `ehr-payment`.`t_product_spu` (
 `c_id` char(32) NOT NULL,
 `c_product_no` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品编码',
 `c_name` varchar(100) NOT NULL COMMENT '商品名称',
 PRIMARY KEY (`c_id`),
 UNIQUE KEY `c_product_no` (`c_product_no`)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8 COMMENT='商品表';

经过如上两点配合设置,新增一条数据是会自动填充自增字段product_no,其中通过sql配置 AUTO_INCREMENT=100001,实现自增字段开始的值。如,此例是从100001开始自增。

补充知识:django关于自增id的问题

在django中,如果创建模型。不指定id。django会自动自定一个id

class Student(models.Model):
  name = models.CharField(max_length=16)
  sex = models.CharField(max_length=4)

像这种情况。django会自动添加一个自增id

在数据库的表结构为

id name sex

相当于

class Student(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=16)
  sex = models.CharField(max_length=4)

然后这id是自增的。

如果需要自定义id,然后这个id值是可用自己定义。那么就需要这样做即可

class Student(models.Model):
  u_id = models.IntegerField(primary_key=True)
  name = models.CharField(max_length=16)
  sex = models.CharField(max_length=4)

把AutoField 修改为IntegerField 即可

这样创建的数据。数据库的id值。就不是自增的。可用在插入sql的时候指定 u_id 的值为3,6,8等。

但是不能重复、

以上这篇基于django 的orm中非主键自增的实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python读取Excel的方法实例分析
Jul 11 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
浅谈python中get pass用法
Mar 19 Python
python 爬取学信网登录页面的例子
Aug 13 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
python序列化与数据持久化实例详解
Dec 20 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
mac在matplotlib中显示中文的操作方法
Mar 06 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
Jun 08 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 #Python
Jupyter notebook快速入门教程(推荐)
May 18 #Python
解决django 向mysql中写入中文字符出错的问题
May 18 #Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 #Python
python实现人像动漫化的示例代码
May 17 #Python
django日志默认打印request请求信息的方法示例
May 17 #Python
使用pyecharts1.7进行简单的可视化大全
May 17 #Python
You might like
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
php上传图片生成缩略图(GD库)
2016/01/06 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
浅析IE10兼容性问题(frameset的cols属性)
2014/01/03 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
Python中生成Epoch的方法
2017/04/26 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
大学在校生求职信范文
2013/11/21 职场文书
奉献演讲稿范文
2014/05/21 职场文书
廉政教育的心得体会
2014/09/01 职场文书
外贸英文求职信范文
2015/03/19 职场文书
化工生产实习心得体会
2016/01/22 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
Python实现制作销售数据可视化看板详解
2021/11/27 Python