1. 程式人生 > >django中的資料庫CURD基本命令

django中的資料庫CURD基本命令

配置資料庫

  資料庫的在settings.py中,django的預設資料庫配置使用的是sqlite.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

 

 

安裝驅動

pip install PyMsql

 

初始化連結

在django的工程同名目錄下的__init__.py的檔案中新增程式碼

from pymsql install_as_MySQLdb

install_as_MySQLdb()

這部分的程式碼作用是讓django的ORM能以mysqldb的方式來呼叫PyMySQL

 

修改配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',  # 資料庫主機
        'PORT': 3306,  # 資料庫埠
        'USER': 'root',  # 資料庫使用者名稱
'PASSWORD': 'mysql', # 資料庫使用者密碼 'NAME': 'django_demo' # 資料庫名字 } }

 

建立對應資料庫

create database django_demo default charset=utf8;

 

定義模型類

  • 模型類被定義在models.py 檔案中.
  • 模型類必須繼承自Model類,包位於:django.db.models中.
    from django.db import models
    
    #定義圖書模型類BookInfo
    class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名稱') bpub_date = models.DateField(verbose_name='釋出日期') bread = models.IntegerField(default=0, verbose_name='閱讀量') bcomment = models.IntegerField(default=0, verbose_name='評論量') is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除') class Meta: db_table = 'tb_books' # 指明資料庫表名 verbose_name = '圖書' # 在admin站點中顯示的名稱 verbose_name_plural = verbose_name # 顯示的複數名稱 def __str__(self): """定義每個資料物件的顯示資訊""" return self.btitle #定義英雄模型類HeroInfo class HeroInfo(models.Model): GENDER_CHOICES = ( (0, 'male'), (1, 'female') ) hname = models.CharField(max_length=20, verbose_name='名稱') hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性別') hcomment = models.CharField(max_length=200, null=True, verbose_name='描述資訊') hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='圖書') # 外來鍵 is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除') class Meta: db_table = 'tb_heros' verbose_name = '英雄' verbose_name_plural = verbose_name def __str__(self): return self.hname

    模型類如果未指明表名,Django預設以 小寫app應用名_小寫模型類名 為資料庫表名。也可通過db_table來指定資料表名.

    

關於主鍵

django會為表建立自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。 預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。

欄位命名規範

不能是python的保留關鍵字。 不允許使用連續的下劃線.

 

欄位型別

欄位  說明
AutoField 自動增長的IntegerField,通常不用指定,不指定時Django會自動建立屬性名為id的自動增長屬性
BooleanField 布林欄位,值為True或False
NullBooleanField 支援Null、True、False三種值
CharField 字串,引數max_length表示最大字元個數
TextField 大文字欄位,一般超過4000個字元時使用
IntegerField 整數
DecimalField 十進位制浮點數, 引數max_digits表示總位數, 引數decimal_places表示小數位數
FloatField 浮點數
DateField

日期, 引數auto_now表示每次儲存物件時,自動設定該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為False; 引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為False; 引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤

TimeField 時間,引數同DateField
DateTimeField 日期時間,引數同DateField
FileField 上傳檔案欄位
ImageField 繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片

 

 

欄位屬性

選項 說明
null 如果為True,表示允許為空,預設值是False
blank 如果為True,則該欄位允許為空白,預設值是False
db_column 欄位的名稱,如果未指定,則使用屬性的名稱
db_index 若值為True, 則在表中會為此欄位建立索引,預設值是False
default 預設
primary_key 若為True,則該欄位會成為模型的主鍵欄位,預設值是False,一般作為AutoField的選項使用
unique 如果為True, 這個欄位在表中必須有唯一值,預設值是False