Django的AutoField字段


Django是一個機智的框架

  默認情況下Djang會為ORM中定義的每一張表加上一個自增ID列,並且用這個列來做主鍵;出於一個MySQL-DBA的工作經歷我覺得

  Djanog還真是機智;這樣么說主要是因為我遇到過許多主從延時的問題,有些比較過分的會延時好幾周,通常這些都是因為binlog格式

  為“ROW”但是表上不存在主鍵引起的。

  

  如果當前網站用的是Django開發的,我想就不會有這種事情發生了吧。

 

AutoField

  Django默認的行為就像這樣

class TestModel(models.Model):
    id = models.AutoField(primary_key=True)

  數據庫層面對應的SQL如下

CREATE TABLE `myapp_testmodel` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

注意

  如果你想的工增加AutoField列,但是又不指定這個列做為主鍵的話,是會報錯的

class TestModel(models.Model):
    tid = models.AutoField()

  不顯示指定主鍵,但是又給表增加AutoField列的話就會報錯

assert not cls._meta.auto_field, "Model %s can't have more than one AutoField." % cls._meta.label
AssertionError: Model myapp.TestModel can't have more than one AutoField.

 

----


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM