基于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 相关文章推荐
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
分析python请求数据
Aug 19 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
Python多叉树的构造及取出节点数据(treelib)的方法
Aug 09 Python
python保留小数位的三种实现方法
Jan 07 Python
python def 定义函数,调用函数方式
Jun 02 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
python和ruby,我选谁?
2017/09/13 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
python 基于opencv去除图片阴影
2021/01/26 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
小松树教学反思
2014/02/11 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
AJAX学习笔记
2021/05/18 Javascript
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
MySQL中in和exists区别详解
2021/06/03 MySQL
Java界面编程实现界面跳转
2022/06/16 Java/Android