django 之 orm
ORM(Object Relational Mapping)
ORM介紹
orm概念
對象關系映射(object Relational Mapping簡稱ORM )模式是一種為了解決面向對象與關系數據庫存在的互不匹配的現象的技術。
簡單的說 ORM 是通過使用秒速對象和數據庫之間映射的元數據 將程序中的對象自動持久化到關系數據庫中。
ORM 在業務邏輯層和數據庫層之間充當橋梁做用
ORM 的由來
讓我們從O/R開始。字母O起源於"對象"(Object),而R則來自於"關系"(Relational)。
幾乎所有的軟件開發過程中都會涉及到對象和關系數據庫。在用戶層面和業務邏輯層面,我們是面向對象的。當對象的信息發生變化的時候,我們就需要把對象的信息保存在關系數據庫中。
按照之前的方式來進行開發就會出現程序員會在自己的業務邏輯代碼中夾雜很多SQL語句用來增加、讀取、修改、刪除相關數據,而這些代碼通常都是重復的
ORM 的優勢
ORM 解決的主要問題是的UI想和關系的映射, 它通常把一個類和一個表一一對應, 類的每個實例對應表中的一條記錄, 類的每個屬性對應表中的每個字段。
ORM 提供了對數據庫的映射 不用之間編寫SQL代碼,只需像操作對象一樣從數據庫操作數據。
讓程序員專註業務邏輯的處理,提高了開發效率。
ORM 的劣勢
ORM的缺點是會在一定程度上犧牲程序的執行效率, (需要經過翻譯才能轉換成SQL語句)
ORM 用多了SQL 語句就不會寫了, 關系數據庫相關技能退化。
ORM 總結
ORM 只是一種工具, 工具確實能解決一些重復簡單的勞動, 這是不可否認的,、但是我們不能指望某個工具能一勞永逸的解決所有問題, 一些特殊問題 還是需要特殊處理。
但是在整個軟件開發過程中需要特殊處理的情況應該都是很少的 , 否則所謂的工具也就失去了存在的意義。
Django中的ORM
Django 項目使用的MYSQL數據庫
1,在Django項目的settings.py 文件中, 配置數據庫連接信息:
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.mysql‘,‘NAME‘: "day62", ‘HOST‘:"127.0.0.1", ‘POST‘:3306, ‘USER‘:‘root‘, ‘PASSWORD‘:‘123‘, } }
2.在Django 項目的__init__.py 文件中寫如下代碼, 告訴Django使用pymysql模塊連接MySQL數據庫:
import pymysql
pymysql.install_as_MySQLdb()
model
在Django中model 是你數據的單一,明確的信息來源。。
他包含了你存儲的數據的重要的字段和行為。
通常一個模型(model)映射到一個數據庫表,
基本情況:
每一個模型都是一個Python類, 它是Django.bd.models.Model 的子類。
模型的每一個屬性都代表一個數據庫字段。
下面定義一個user類:
上面的這個user模型會想這樣創建一個數據庫表:
create table user( id int primary key, name varcher(16), password varchar(128))
一些說明:
表myapp_user的名稱是自動生成的,如果你要自定義表名,需要在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