ORM(Object Relational Mapping)是物件-關係-對映的簡稱。
ORM是MVC框架中的重要的部分。它實現了資料模型與資料庫的解耦,即資料模型的設計不需要依賴於特定的資料庫,透過簡單的配置就可以輕鬆更換資料庫,這極大的減輕了開發人員的工作量
在ORM中,有三種對應關係:
- 類對應表
- 類屬性對應表欄位
- 類物件對應表記錄
如何在Django中使用ORM
-
1.建立物件對映關係,即建立模型類,其實就是在app下的models.py中,以類和屬性的形式定義表的欄位
models.pyfrom django.db import models class User(models.Model): username = models.CharField(max_length=32, verbose_name='使用者名稱') # 當輸出物件時候自動輸出相應物件(記錄)的使用者名稱【純是輸出物件為了好看哈哈哈】 def __str__(self): return self.username
-
2.配置資料庫連線,並且有了關係對映關係,這個時候就可以透過命令在資料庫中生成具體表了
db.sqlite3配置
dj.sqlite3是django中的整合資料庫,在settings中配置好的,適合測試環境用【適用於資料量小的時候】DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
mysql配置
首先安裝用於連線mysql的模組pip install pymysql
然後新增配置,在與專案同名目錄中的__init__.py新增以下程式碼
import pymysql pymysql.install_as_MySQLdb()
接下來,就需要手動在mysql中手動建立資料庫啦
然後,連線mysql還需要再Django中的settings中配置一下DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day07', #你的資料庫名稱 'USER': 'root', #你的資料庫使用者名稱 'PASSWORD': '123', #你的資料庫密碼 'HOST': '', #你的資料庫主機,留空預設為localhost 'PORT': '3306', #你的資料庫埠 } }
由於ORM會將ORM語句轉換成原生sql語句,可能有些SQL不符合我們的預期,所以這個日誌配置,用來檢視 ORM到底將語句轉換成什麼,方便我們排查
如果想檢視ORM轉換為的sql語句,可以在settings中配置
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
也可以為每個app單獨配置資料庫,可以在settings中配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'bms', # 要連線的資料庫,連線前需要建立好 'USER':'root', # 連線資料庫的使用者名稱 'PASSWORD':'', # 連線資料庫的密碼 'HOST':'127.0.0.1', # 連線主機,預設本級 'PORT':3306 # 埠 預設3306 }, 'app01': { #可以為每個app都配置自己的資料,並且資料庫還可以指定別的,也就是不一定就是mysql,也可以指定sqlite等其他的資料庫 'ENGINE': 'django.db.backends.mysql', 'NAME':'bms', # 要連線的資料庫,連線前需要建立好 'USER':'root', # 連線資料庫的使用者名稱 'PASSWORD':'', # 連線資料庫的密碼 'HOST':'127.0.0.1', # 連線主機,預設本級 'PORT':3306 # 埠 預設3306 }
}
- 3.資料庫遷移,只需要執行兩個命令就可以
上述命令會將所有的APP(settings中的INSTALLED_APPS中的app)中的models.py的對映類,真正的在數 據庫中建立相應的表。但是也可能有失敗的時候,那麼我們就要強制執行資料庫遷移命令:python manage.py makemigrations # 用來讀取你在modesl.py中的類和屬性,建立資料庫的對映關係【生成檔案】 python manage.py migrate # 讀取對映關係檔案,在資料庫中生成相應的表
上述操作,僅適用於連線mysqlpython manage.py migrate your_app_name --database your_app_name
注意點- Django為了區分某個表屬於某個應用,建立的表都是以應用名加下劃線加表名的形式,如上述的UserInfo表,Django會建立成app01_userinfo