Django中ORM介紹
目錄
- 一 ORM介紹
- 1.1 ORM 概念
- 1.2 ORM的由來
- 1.3 ORM的優勢
- 1.4 ORM的劣勢
- 1.5 ORM總結
- 二 Django中的ORM
- 2.1 Django使用MySQL數據庫
- 2.2 Model
- 2.3 快速入門
一 ORM介紹
1.1 ORM 概念
對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術。
簡單的說,ORM是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動持久化到關系數據庫中。
ORM在業務邏輯層和數據庫層之間充當了橋梁的作用。
1.2 ORM的由來
字母O起源於"對象"(Object),而R則來自於"關系"(Relational)。幾乎所有的軟件開發過程中都會涉及到對象和關系數據庫。在用戶層面和業務邏輯層面,我們是面向對象的。當對象的信息發生變化的時候,我們就需要把對象的信息保存在關系數據庫中。按照之前的方式來進行開發就會出現程序員會在自己的業務邏輯代碼中夾雜很多SQL語句用來增加、讀取、修改、刪除相關數據,而這些代碼通常都是重復的。
1.3 ORM的優勢
ORM解決的主要問題是對象和關系的映射。它通常把一個類和一個表一一對應,類的每個實例對應表中的一條記錄,類的每個屬性對應表中的每個字段。
ORM提供了對數據庫的映射,不用直接編寫SQL代碼,只需像操作對象一樣從數據庫操作數據。
讓軟件開發人員專註於業務邏輯的處理,提高了開發效率。
1.4 ORM的劣勢
ORM的缺點是會在一定程度上犧牲程序的執行效率。
ORM用多了SQL語句就不會寫了,關系數據庫相關技能退化...
1.5 ORM總結
ORM只是一種工具,工具確實能解決一些重復,簡單的勞動。這是不可否認的。但我們不能指望某個工具能一勞永逸地解決所有問題,一些特殊問題還是需要特殊處理的。
但是在整個軟件開發過程中需要特殊處理的情況應該都是很少的,否則所謂的工具也就失去了它存在的意義。
二 Django中的ORM
2.1 Django使用MySQL數據庫
- 在Django項目的settings.py配置文件中,配置數據庫連接信息。
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "你的數據庫名稱", # 需要自己手動創建數據庫 "USER": "數據庫用戶名", "PASSWORD": "數據庫密碼", "HOST": "數據庫IP", "POST": 3306 } }
- 在Django項目的__inti__.py文件中寫下如下代碼,告訴Django使用pymysql模塊鏈接MySQL數據庫
import pymysql
pymysql.install_as_MySQLdb()
2.2 Model
在Django中model是你數據的單一、明確的信息來源。它包含了你存儲數據的重要字段和行為。通常,一個模型(model)映射到一個數據庫表。
基本情況:
- 每個模型都是一個python類,它是django.db.models.Model的子類
- 模型的每個屬性都代表一個數據庫字段
- 綜上所述,Django為您提供了一個自動生成的數據庫訪問API,詳詢官方文檔鏈接。
2.3 快速入門
下面這個例子定義了一個 Person模型,包含 first_name 和 last_name。
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
first_name 和 last_name是模型的字段。每個字段被指定為一個類屬性,每個屬性映射到一個數據庫列
上面的Person模型將會向這樣雙肩一個數據庫表:
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
一些說明:
- 表myapp_person的名稱是自動生成的,如果你要自定義表名,需要在model的Meta類中指定 db_table 參數,強烈建議使用小寫表名,特別是使用MySQL作為後端數據庫時。
- id字段是自動添加的,如果你想要指定自定義主鍵,只需在其中一個字段中指定 primary_key=True 即可。如果Django發現你已經明確地設置了Field.primary_key,它將不會添加自動ID列。
- 本示例中的CREATE TABLE SQL使用PostgreSQL語法進行格式化,但值得註意的是,Django會根據配置文件中指定的數據庫後端類型來生成相應的SQL語句。
- Django支持MySQL5.5及更高版本。
Django中ORM介紹