欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django學(xué)習(xí)筆記之ORM基礎(chǔ)教程

 更新時(shí)間:2018年03月27日 11:42:03   作者:人生不如戲  
ORM,即Object-Relational Mapping(對(duì)象關(guān)系映射),它的作用是在關(guān)系型數(shù)據(jù)庫(kù)和業(yè)務(wù)實(shí)體對(duì)象之間作一個(gè)映射,下面這篇文章主要給大家介紹了關(guān)于Django學(xué)習(xí)筆記之ORM基礎(chǔ)教程的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。

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ù)和python匿名函數(shù)lambda詳解

    python函數(shù)和python匿名函數(shù)lambda詳解

    這篇文章主要介紹了python函數(shù)和python匿名函數(shù)lambda,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • python中Tkinter復(fù)選框Checkbutton是否被選中判斷

    python中Tkinter復(fù)選框Checkbutton是否被選中判斷

    這篇文章主要介紹了python中Tkinter復(fù)選框Checkbutton是否被選中判斷方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 使用python實(shí)現(xiàn)名片管理系統(tǒng)

    使用python實(shí)現(xiàn)名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了使用python實(shí)現(xiàn)名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Web服務(wù)器框架 Tornado簡(jiǎn)介

    Web服務(wù)器框架 Tornado簡(jiǎn)介

    Tornado Web Server 是使用Python編寫出來的一個(gè)極輕量級(jí)、高可伸縮性和非阻塞IO的Web服務(wù)器軟件,著名的 Friendfeed 網(wǎng)站就是使用它搭建的。
    2014-07-07
  • Python如何檢驗(yàn)樣本是否服從正態(tài)分布

    Python如何檢驗(yàn)樣本是否服從正態(tài)分布

    這篇文章主要介紹了Python如何檢驗(yàn)樣本是否服從正態(tài)分布問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)complex介紹

    Python標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)complex介紹

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)內(nèi)置函數(shù)complex介紹,本文先是講解了complex的作用和使用注意,然后給出了使用示例,需要的朋友可以參考下
    2014-11-11
  • django云端留言板實(shí)例詳解

    django云端留言板實(shí)例詳解

    這篇文章主要介紹了django云端留言板實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • selenium+python 去除啟動(dòng)的黑色cmd窗口方法

    selenium+python 去除啟動(dòng)的黑色cmd窗口方法

    今天小編就為大家分享一篇selenium+python 去除啟動(dòng)的黑色cmd窗口方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 關(guān)于Python的異常捕獲和處理

    關(guān)于Python的異常捕獲和處理

    程序在運(yùn)行過程當(dāng)中,不可避免的會(huì)出現(xiàn)一些錯(cuò)誤,比如:使用了沒有賦值過的變量,使用了不存在的索引,一個(gè)數(shù)字除以0,這些錯(cuò)誤在程序中,我們稱其為異常,那么如何處理這些異常呢,今天我們就來看一看
    2023-04-04
  • Python 3.x 安裝opencv+opencv_contrib的操作方法

    Python 3.x 安裝opencv+opencv_contrib的操作方法

    下面小編就為大家分享一篇Python 3.x 安裝opencv+opencv_contrib的操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04

最新評(píng)論