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

django的ORM模型的實(shí)現(xiàn)原理

 更新時(shí)間:2019年03月04日 08:34:04   作者:小短腿電工  
這篇文章主要介紹了django的ORM模型的實(shí)現(xiàn)原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

ORM模型介紹

隨著項(xiàng)目越來越大,采用寫原生SQL的方式在代碼中會出現(xiàn)大量的SQL語句,那么問題就出現(xiàn)了:

  1. SQL語句重復(fù)利用率不高,越復(fù)雜的SQL語句條件越多,代碼越長。會出現(xiàn)很多相近的SQL語句。
  2. 很多SQL語句是在業(yè)務(wù)邏輯中拼出來的,如果有數(shù)據(jù)庫需要更改,就要去修改這些邏輯,這會很容易漏掉對某些SQL語句的修改。
  3. 寫SQL時(shí)容易忽略web安全問題,給未來造成隱患。SQL注入。

ORM ,全稱 Object Relational Mapping ,中文叫做對象關(guān)系映射,通過 ORM 我們可以通過類的方式去操作數(shù)據(jù)庫,而不用再寫原生的SQL語句。通過把表映射成類,把行作實(shí)例,把字段作為屬性, ORM 在執(zhí)行對象操作的時(shí)候最終還是會把對應(yīng)的操作轉(zhuǎn)換為數(shù)據(jù)庫原生語句。使用 ORM 有許多優(yōu)點(diǎn):

  • 易用性:使用 ORM 做數(shù)據(jù)庫的開發(fā)可以有效的減少重復(fù)SQL語句的概率,寫出來的模型也更加直觀、清晰。
  • 性能損耗?。?ORM 轉(zhuǎn)換成底層數(shù)據(jù)庫操作指令確實(shí)會有一些開銷。但從實(shí)際的情況來看,這種性能損耗很少(不足5%),只要不是對性能有嚴(yán)苛的要求,綜合考慮開發(fā)效率、代碼的閱讀性,帶來的好處要遠(yuǎn)遠(yuǎn)大于性能損耗,而且項(xiàng)目越大作用越明顯。
  • 設(shè)計(jì)靈活:可以輕松的寫出復(fù)雜的查詢。
  • 可移植性: Django 封裝了底層的數(shù)據(jù)庫實(shí)現(xiàn),支持多個(gè)關(guān)系數(shù)據(jù)庫引擎,包括流行的 MySQL 、 PostgreSQL 和 SQLite 。可以非常輕松的切換數(shù)據(jù)庫。

創(chuàng)建ORM模型

ORM 模型一般都是放在 app 的 models.py 文件中。每個(gè) app 都可以擁有自己的模型。并且如果這個(gè)模型想要映射到數(shù)據(jù)庫中,那么這個(gè) app 必須要放在 settings.py 的 INSTALLED_APP 中進(jìn)行安裝。以下是寫一個(gè)簡單的書籍 ORM 模型。示例代碼如下:

from django.db import models
class Book(models.Model):
 name = models.CharField(max_length=20,null=False)
 author = models.CharField(max_length=20,null=False)
 pub_time = models.DateTimeField(default=datetime.now)
 price = models.FloatField(default=0)

以上便定義了一個(gè)模型。這個(gè)模型繼承自 django.db.models.Model ,如果這個(gè)模型想要映射到數(shù)據(jù)庫中,就必須繼承自這個(gè)類。這個(gè)模型以后映射到數(shù)據(jù)庫中,表名是模型名稱的小寫形式,為 book 。在這個(gè)表中,有四個(gè)字段,一個(gè)為 name ,這個(gè)字段是保存的是書的名稱,是 varchar 類型,最長不能超過20個(gè)字符,并且不能為空。第二個(gè)字段是作者名字類型,同樣也是 varchar 類型,長度不能超過20個(gè)。第三個(gè)是出版時(shí)間,數(shù)據(jù)類型是 datetime 類型,默認(rèn)是保存這本書籍的時(shí)間。第五個(gè)是這本書的價(jià)格,是浮點(diǎn)類型。

還有一個(gè)字段我們沒有寫,就是主鍵 id ,在 django 中,如果一個(gè)模型沒有定義主鍵,那么將會自動生成一個(gè)自動增長的 int 類型的主鍵,并且這個(gè)主鍵的名字就叫做 id 。

映射模型到數(shù)據(jù)庫中:

將 ORM 模型映射到數(shù)據(jù)庫中,總結(jié)起來就是以下幾步:

  1. 在 settings.py 中,配置好 DATABASES ,做好數(shù)據(jù)庫相關(guān)的配置。
  2. 在 app 中的 models.py 中定義好模型,這個(gè)模型必須繼承自 django.db.models 。
  3. 將這個(gè) app 添加到 settings.py 的 INSTALLED_APP 中。
  4. 在命令行終端,進(jìn)入到項(xiàng)目所在的路徑,然后執(zhí)行命令 python manage.py makemigrations 來生成遷移腳本文件。
  5. 同樣在命令行中,執(zhí)行命令 python manage.py migrate 來將遷移腳本文件映射到數(shù)據(jù)庫中。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)農(nóng)歷轉(zhuǎn)換教程詳解

    Python實(shí)現(xiàn)農(nóng)歷轉(zhuǎn)換教程詳解

    農(nóng)歷,是我國現(xiàn)行的傳統(tǒng)歷法。它是根據(jù)月相的變化周期,每一次月相朔望變化為一個(gè)月,參考太陽回歸年為一年的長度,并加入二十四節(jié)氣與設(shè)置閏月以使平均歷年與回歸年相適應(yīng)。本文將用Python實(shí)現(xiàn)農(nóng)歷轉(zhuǎn)換,需要的可以參考一下
    2022-03-03
  • Python讀寫二進(jìn)制文件的示例詳解

    Python讀寫二進(jìn)制文件的示例詳解

    在Python編程中,我們經(jīng)常需要處理各種類型的文件,其中包括二進(jìn)制文件,本文將詳細(xì)介紹如何使用Python讀寫二進(jìn)制文件,并提供一些實(shí)際應(yīng)用的示例,希望對大家有所幫助
    2024-01-01
  • python3學(xué)習(xí)筆記之多進(jìn)程分布式小例子

    python3學(xué)習(xí)筆記之多進(jìn)程分布式小例子

    本篇文章主要介紹了python3學(xué)習(xí)筆記之多進(jìn)程分布式小例子,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • python中類的輸出或類的實(shí)例輸出為<__main__類名 object at xxxx>這種形式的原因

    python中類的輸出或類的實(shí)例輸出為<__main__類名 object at xxxx>這種形式的原因

    在本篇文章里小編給大家分享了關(guān)于python中類的輸出或類的實(shí)例輸出為何是<__main__類名 object at xxxx>這種形式,需要的朋友們可以參考下。
    2019-08-08
  • Python 跨.py文件調(diào)用自定義函數(shù)說明

    Python 跨.py文件調(diào)用自定義函數(shù)說明

    這篇文章主要介紹了Python 跨.py文件調(diào)用自定義函數(shù)說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python使用MkDocs自動生成文檔的操作方法

    python使用MkDocs自動生成文檔的操作方法

    python代碼注釋風(fēng)格有很多,比較主流的有 reStructuredText風(fēng)格、numpy風(fēng)格、Google風(fēng)格,自動生成文檔的工具也有很多,常見的有:Pydocs,Sphinx和MkDocs,本文給大家介紹了python使用MkDocs自動生成文檔的操作方法,需要的朋友可以參考下
    2024-06-06
  • Python中字符串類型代碼的執(zhí)行函數(shù)——eval()、exec()和compile()詳解

    Python中字符串類型代碼的執(zhí)行函數(shù)——eval()、exec()和compile()詳解

    這篇文章主要介紹了Python中字符串類型代碼的執(zhí)行函數(shù)——eval()、exec()和compile(),字符串類型代碼的執(zhí)行函數(shù)有三個(gè),都是Python的內(nèi)置函數(shù),下面逐一對這三個(gè)函數(shù)詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • Python基于pyopencv人臉識別并繪制GUI界面

    Python基于pyopencv人臉識別并繪制GUI界面

    本文詳細(xì)講解了Python基于pyopencv人臉識別并繪制GUI界面,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Python 中使用正則表達(dá)式轉(zhuǎn)義

    Python 中使用正則表達(dá)式轉(zhuǎn)義

    這篇文章主要介紹了Python 正則表達(dá)式轉(zhuǎn)義,在 Python 中,正則表達(dá)式轉(zhuǎn)義sub()方法用于替換字符串,替換后的字符串由 re 模塊中的 Python 內(nèi)置方法返回,需要的朋友可以參考下
    2023-06-06
  • Python深度學(xué)習(xí)之圖像標(biāo)簽標(biāo)注軟件labelme詳解

    Python深度學(xué)習(xí)之圖像標(biāo)簽標(biāo)注軟件labelme詳解

    這篇文章主要介紹了Python深度學(xué)習(xí)之圖像標(biāo)簽標(biāo)注軟件labelme詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04

最新評論