1. 程式人生 > 其它 >Django框架之ORM解析和實際應用

Django框架之ORM解析和實際應用

技術標籤:Djangodjangopython

一、ORM是什麼?

ORM全稱:Object Relational Mapping 關係物件對映
ORM分為兩種:

1、DB First 先建立資料庫表結構,根據表結構生成類,根據類操作資料庫
2、Code First 是先寫程式碼,後建立資料庫,根據類建立資料庫表.
主流的orm都是code first。django 的orm也是code first

Django的ORM來源: django中內嵌了ORM框架,不需要直接面向資料庫程式設計,而是定義模型類,通過模型類和物件完成資料表的增刪改查操作。

Django連線資料庫MySQL: 使用MySQL資料庫首先需要安裝驅動程式。(pip install PyMySQL 呼叫時為 import pymysql)

Django預設匯入的mysql的驅動程式是MySQLdb,然而MySQLdb對於py3支援不全,所以這裡使用PyMySQL。 用於Python連結Mysql資料庫的介面。需要在__init__檔案指定

from pymysql import install_as_MySQLdb install_as_MySQLdb() 。作用是讓Django的ORM能以mysqldb的方式來呼叫PyMySQL。

ORM:物件關係對映。在專案與資料庫之間起橋樑作用。

  • 1、在ORM框架中,它幫我們把類和資料表進行了一個對映,可以讓我們通過類和類物件就能操作它所對應的表格中的資料。例如:模型類BookInfo --對映到–> 資料表bookinfo。使資料庫設計更加簡單

  • 2、ORM框架還有一個功能,它可以根據我們設計的類自動幫我們生成資料庫中的表格,省去了我們自己建表的過程。

核心思想: 用面向物件的方式去操作資料庫的建立表、增加、修改、刪除、查詢等操作。把面向物件中的類和資料庫表一一對應,通過操作類和物件,對資料表實現資料操作,不需要寫sql,由orm框架生成。

Django的ORM操作原理: Django的orm操作本質上會根據對接的資料庫引擎,翻譯成對應的sql語句;所有使用Django開發的專案無需關心程式底層使用的是MySQL、Oracle、sqlite…,如果資料庫遷移,只需要更換Django的資料庫引擎即可

Django的ORM優點缺點:

  • 1)只需要面向物件程式設計, 不需要面向資料庫編寫程式碼,對資料庫的操作都轉化成對類屬性和方法的操作.不用編寫各種資料庫的sql語句.

  • 2)實現了資料模型與資料庫的解耦, 遮蔽了不同資料庫操作上的差異.不在關注用的是mysql,oracle…等.,通過簡單的配置就可以輕鬆更換資料庫, 而不需要修改程式碼.

  • 3)在對映過程中有效能缺失,面向物件程式設計到sql語句之間的對映需要過程時間,造成效能缺失

二、Django中關於ORM的使用

1. 配置Django框架中所使用的資料庫

django有預設自帶的資料庫,當然也可以用其他的資料庫,修改資料庫的方式也很簡單是需要在setting.py修改
DATABASES這裡面的引數就可以了,這裡使用的是預設的sqlite3

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

2. 使用模型 M(modules.py),通過面向物件來實現,無須面向SQL

在這裡插入圖片描述

2-1 先在models.py裡定義模型類

From django.db import models
Class Books(models.Model): 						 	#繼承models.Model才能成為模型類
	Title = modes.CharField(max_length = 20)		#設定最大長度
	Pub_data = models.DateField()					#日期格式
	Def __str(self):								# 定義一個方法顯示字串 
    	Return sef.title.encode(‘utf-8)  			#有中文的話,編碼utf-8不會報錯
Class Hero(modes.Mode):
	Name = models.CharField(max_length = 30)
	Content = models.CharField(max_length = 100)
	Gender = modes.BooleanField(default=True)	#Bool 型別
	Book = modes.ForeignKey(Books)    # 外來鍵,表示指定Book會對應一個類Books物件 
	Def __str__(self):
    	Return sef.name.encode(‘utf-8)
    	

2-2 在專案目錄下生成遷移,類似生成資料庫語句

python manage.py makemigrations	 #生成遷移檔案

生成遷移檔案的命令:根據模型類的屬性來確定資料庫表中的結構。根據模型類生成遷移檔案,會在應用目錄下migrations目錄裡,生成py檔案(相當於SQL檔案),放類似於SQL語句的東西

python manage.py migrate      #遷移

根據遷移檔案建立資料庫生成表,在booktest下生成db_sqlite3資料庫
參考

  • python manage.py makemigrations 這個命令是記錄我們對models.py的所有改動,並且將這個改動遷移到migrations這個檔案下生成一個檔案。例如:0001檔案,如果你接下來還要進行改動的話可能生成就是另外一個檔案不一定都是0001檔案,他會在你的最近一次遷移檔案加一,比如上次你的遷移檔案是0001那麼這次你的遷移檔案就是0002.

  • 這個命令並沒有作用到資料庫,他只是記錄你的資料庫需要更改的地方也就是你的model更改的東西,所以我們需要執行python manage.py migrate 命令 這條命令的主要作用就是把這些改動作用到資料庫也就是執行migrations裡面新改動的遷移檔案更新資料庫,比如建立資料表,或者增加欄位屬性

  • 重點生成的遷移檔案不要修改或者刪除它。每次執行migrate相應的就會在資料庫中生成一條相關記錄,每次執行migrate就會查詢資料庫中最後一次執行的遷移檔案,然後再執行你新生成的。