基于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中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
python下载文件时显示下载进度的方法
Apr 02 Python
Python连接phoenix的方法示例
Sep 29 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
python学习入门细节知识点
Mar 29 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
python代理工具mitmproxy使用指南
Jul 04 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
python Tornado框架的使用示例
Oct 19 Python
Python数据分析之pandas函数详解
Apr 21 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程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
jquery ui对话框实例代码
2013/05/10 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
javascript常见操作汇总
2014/09/03 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
js比较日期大小的方法
2015/05/12 Javascript
jquery ajax局部加载方法详解(实现代码)
2016/05/12 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
设置jquery UI 控件的大小方法
2016/12/12 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
Python使用py2exe打包程序介绍
2014/11/20 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
Python基于traceback模块获取异常信息
2020/07/23 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
爱国主义教育演讲稿
2014/08/26 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
邀请函模板
2015/02/02 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
企业战略合作意向书
2015/05/08 职场文书
走进毛泽东观后感
2015/06/04 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技