Django學(xué)習(xí)筆記之ORM基礎(chǔ)教程
ORM簡(jiǎn)介
ORM概念
對(duì)象關(guān)系映射(Object Relational Mapping,簡(jiǎn)稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫(kù)存在的互不匹配的現(xiàn)象的技術(shù)。
簡(jiǎn)單的說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中。
ORM在業(yè)務(wù)邏輯層和數(shù)據(jù)庫(kù)層之間充當(dāng)了橋梁的作用。
ORM由來
讓我們從O/R開始。字母O起源于"對(duì)象"(Object),而R則來自于"關(guān)系"(Relational)。
幾乎所有的軟件開發(fā)過程中都會(huì)涉及到對(duì)象和關(guān)系數(shù)據(jù)庫(kù)。在用戶層面和業(yè)務(wù)邏輯層面,我們是面向?qū)ο蟮摹.?dāng)對(duì)象的信息發(fā)生變化的時(shí)候,我們就需要把對(duì)象的信息保存在關(guān)系數(shù)據(jù)庫(kù)中。
按照之前的方式來進(jìn)行開發(fā)就會(huì)出現(xiàn)程序員會(huì)在自己的業(yè)務(wù)邏輯代碼中夾雜很多SQL語(yǔ)句用來增加、讀取、修改、刪除相關(guān)數(shù)據(jù),而這些代碼通常都是重復(fù)的。
ORM的優(yōu)勢(shì)
ORM解決的主要問題是對(duì)象和關(guān)系的映射。它通常把一個(gè)類和一個(gè)表一一對(duì)應(yīng),類的每個(gè)實(shí)例對(duì)應(yīng)表中的一條記錄,類的每個(gè)屬性對(duì)應(yīng)表中的每個(gè)字段。
ORM提供了對(duì)數(shù)據(jù)庫(kù)的映射,不用直接編寫SQL代碼,只需像操作對(duì)象一樣從數(shù)據(jù)庫(kù)操作數(shù)據(jù)。
讓軟件開發(fā)人員專注于業(yè)務(wù)邏輯的處理,提高了開發(fā)效率。
ORM的劣勢(shì)
ORM的缺點(diǎn)是會(huì)在一定程度上犧牲程序的執(zhí)行效率。
ORM用多了SQL語(yǔ)句就不會(huì)寫了,關(guān)系數(shù)據(jù)庫(kù)相關(guān)技能退化...
ORM總結(jié)
ORM只是一種工具,工具確實(shí)能解決一些重復(fù),簡(jiǎn)單的勞動(dòng)。這是不可否認(rèn)的。
但我們不能指望某個(gè)工具能一勞永逸地解決所有問題,一些特殊問題還是需要特殊處理的。
但是在整個(gè)軟件開發(fā)過程中需要特殊處理的情況應(yīng)該都是很少的,否則所謂的工具也就失去了它存在的意義。
Django連接MySQL數(shù)據(jù)庫(kù)
1. 在Django項(xiàng)目的settings.py文件中,配置數(shù)據(jù)庫(kù)連接信息:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "你的數(shù)據(jù)庫(kù)名稱", # 需要自己手動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)
"USER": "數(shù)據(jù)庫(kù)用戶名",
"PASSWORD": "數(shù)據(jù)庫(kù)密碼",
"HOST": "數(shù)據(jù)庫(kù)IP",
"POST": 3306
}
}
2. 在Django項(xiàng)目(注意,項(xiàng)目里的,不是app)的__init__.py文件中寫如下代碼,告訴Django使用pymysql模塊連接MySQL數(shù)據(jù)庫(kù):
import pymysql pymysql.install_as_MySQLdb()
3.如需在pycharm里視圖操作:

Django中ORM的(簡(jiǎn)單)增刪改查
增
增加表
下面這個(gè)例子定義了一個(gè) 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)
然后執(zhí)行下面命令:
python manage.py makemigrations python manage.py migrate
first_name 和 last_name 是模型的字段。每個(gè)字段被指定為一個(gè)類屬性,每個(gè)屬性映射到一個(gè)數(shù)據(jù)庫(kù)列。
上面的 Person 模型將會(huì)像這樣創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表:
CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );
增加數(shù)據(jù)
models.Person.object.create(first_name='fu',last_name='yong')
刪
models.Person.object.get(id=1).delete()
改
obj = models.Person.object.get(id=1) obj.last_name = 'xiaoyong'<br data-filtered="filtered"><br data-filtered="filtered">obj.save()
查
models.Person.object.all() #查找所有記錄,返回一個(gè)queryset對(duì)象 models.Person.object.get(字段=值) #按照字段查找
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python在多玩圖片上下載妹子圖的實(shí)現(xiàn)代碼
學(xué)python的第二天,想寫個(gè)東西出來玩玩,于是就寫了這個(gè),供那些才學(xué)一天的參考參考也行2013-08-08
Python?代替?xftp?從?Linux?服務(wù)器下載文件的操作方法
我們經(jīng)常需要從Linux服務(wù)器上同步文件,但是xftp等工具都需要注冊(cè)了,這里用免費(fèi)的Python代碼來下載文件,還可以擴(kuò)展更多的自定義用法,這篇文章主要介紹了Python?代替?xftp?從?Linux?服務(wù)器下載文件,需要的朋友可以參考下2024-06-06
Python tkinter實(shí)現(xiàn)圖片標(biāo)注功能(完整代碼)
tkinter是Python下面向tk的圖形界面接口庫(kù),可以方便地進(jìn)行圖形界面設(shè)計(jì)和交互操作編程,本文通過實(shí)例代碼給大家介紹的Python tkinter實(shí)現(xiàn)圖片標(biāo)注功能,感興趣的朋友一起看看吧2019-12-12
Python 無(wú)限級(jí)分類樹狀結(jié)構(gòu)生成算法的實(shí)現(xiàn)
這篇文章主要介紹了Python 無(wú)限級(jí)分類樹狀結(jié)構(gòu)生成算法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
python服務(wù)器端收發(fā)請(qǐng)求的實(shí)現(xiàn)代碼
這篇文章主要介紹了python服務(wù)器端收發(fā)請(qǐng)求的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09
TensorFlow基本的常量、變量和運(yùn)算操作詳解
今天小編就為大家分享一篇TensorFlow基本的常量、變量和運(yùn)算操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Pandas實(shí)現(xiàn)數(shù)據(jù)拼接的操作方法詳解
Python處理大規(guī)模數(shù)據(jù)集的時(shí)候經(jīng)常需要使用到合并、鏈接的方式進(jìn)行數(shù)據(jù)集的整合,本文為大家主要介紹了.merge()、?.join()?和?.concat()?三種方法,感興趣的可以了解一下2022-04-04

