1. 程式人生 > 程式設計 >基於django 的orm中非主鍵自增的實現方式

基於django 的orm中非主鍵自增的實現方式

我們知道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中非主鍵自增的實現方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。