背景
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,聲明。