orm分為兩種:
1、db first 先建立資料庫表結構,根據表結構生成類,根據類運算元據庫
2、code first 是先寫**,後建立資料庫,根據類建立資料庫表.
主流的orm都是code first。django 的orm也是code first
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:物件關係對映。在專案與資料庫之間起橋梁作用。
核心思想:用物件導向的方式去運算元據庫的建立表、增加、修改、刪除、查詢等操作。把物件導向中的類和資料庫表一一對應,通過操作類和物件,對資料表實現資料操作,不需要寫sql,由orm框架生成。
django的orm操作原理:django的orm操作本質上會根據對接的資料庫引擎,翻譯成對應的sql語句;所有使用django開發的專案無需關心程式底層使用的是mysql、oracle、sqlite…,如果資料庫遷移,只需要更換django的資料庫引擎即可
django的orm優點缺點:
django有預設自帶的資料庫,當然也可以用其他的資料庫,修改資料庫的方式也很簡單是需要在setting.py修改
databases這裡面的引數就可以了,這裡使用的是預設的sqlite3
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之Django框架的ORM簡介
databases 2.在與django 專案同名的目錄下的 init py 檔案中寫下如下 告訴django 使用pymysql模組連線mysql資料庫 import pymysql pymysql.install as mysqldb 3.資料庫遷移的時候出現乙個警告 warnings mysq...
Django框架之ORM基本實現原理
django的orm django中內嵌了orm框架,不需要直接面向資料庫程式設計,而是定義模型類,通過模型類和物件完成資料表的增刪改查操作。django連線資料庫mysql 使用mysql資料庫首先需要安裝驅動程式。pip install pymysql 呼叫時為 import pymysql d...
Django之ORM中事務和鎖
orm 事務 資料庫事務 簡稱 事務 是資料庫管理系統執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。並非任意的對資料庫的操作序列都是資料庫事務。資料庫事務擁有以下四個特性,習慣上被稱之為acid特性。1.原子性 atomicity 事務作為乙個整體被執行,包含在其中的對資料庫的操作要麼全...