背景
Django架構功能齊全自帶資料庫操作功能,由于工作中設計巨量的api接口,需要一個很好的web後端服務架構,Django給了莫大的幫助。本文主要介紹Django的ORM架構
我們一般對資料庫的使用的認識是:
- 建立資料庫,設計表結構和字段
- 使用 MySQLdb 來連接配接資料庫,并編寫資料通路層代碼
- 業務邏輯層去調用資料通路層執行資料庫操作
ORM是什麼?
ORM:Object Relational Mapping(關系對象映射),在django中,根據代碼中的類自動生成資料庫的表也叫--code first。
- 類名對應------》資料庫中的表名
- 類屬性對應---------》資料庫裡的字段
- 類執行個體對應---------》資料庫表裡的一行資料
- obj.id obj.name.....類執行個體對象的屬性
Django ORM的優勢:
Django的orm操作本質上會根據對接的資料庫引擎,翻譯成對應的sql語句;所有使用Django開發的項目無需關心程式底層使用的是MySQL、Oracle、sqlite....,如果資料庫遷移,隻需要更換Django的資料庫引擎即可。
總的來說,Django的ORM 在設計初已經考慮了大量web設計中資料庫操作的共有需求,配置好資料庫後,就可以像使用變量模型一樣操作資料庫中資料。
一、資料庫配置(MySQL)
1、建立資料庫 (注意設定 資料的字元編碼)
由于Django自帶的orm是data_first類型的ORM,使用前必須先建立資料庫
2、修改project中的settings.py檔案中設定 連接配接 MySQL資料庫(Django預設使用的是sqllite資料庫)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'you mysql db name ',
'USER': 'user name',
'PASSWORD': 'password',
'HOST': 'your mydql db host',
'PORT': 'your mysql db port',
}
}
擴充:檢視orm操作執行的原生SQL語句,在project中的settings.py檔案增加。
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
3、由于Django2.X後隻支援python3,而目前MySQLdb對python3沒有支援,是以需要使用pymysql,在django項目中修改project 中的__init__py 檔案設定 Django預設連接配接MySQL的方式
import pymysql
pymysql.install_as_MySQLdb()
4、setings檔案注冊APP
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
]
注冊APP後,Django會根據APP的名稱等生成并使用表/庫。Django中資料庫必須有非空主鍵,而且如果沒有聲明,所有的字段都會預設設計成非空。
- 按照規則在models.py子產品中設計表。
- 資料遷移操作。
python manage.py makemigrations #根據app下的migrations目錄中的記錄,檢測目前model層代碼是否發生變化?
python manage.py migrate #把orm代碼轉換成sql語句去資料庫執行
python manage.py migrate --fake #隻記錄變化,不送出資料庫操作
注:由于所有字段都預設是非空,是以在增加字段時會報錯,

解決辦法是增加:null=Ture,聲明。