12.ORM模型

 

ORM模型的建立和映射:

隨着項目愈來愈大,採用寫原生SQL的方式在代碼中會出現大量的SQL語句,那麼問題就出現了:javascript

  1. SQL語句重複利用率不高,越複雜的SQL語句條件越多,代碼越長。會出現不少相近的SQL語句。
  2. 不少SQL語句是在業務邏輯中拼出來的,若是有數據庫須要更改,就要去修改這些邏輯,這會很容易漏掉對某些SQL語句的修改。
  3. 寫SQL時容易忽略web安全問題,給將來形成隱患。SQL注入。

ORM

全稱Object Relational Mapping,中文叫作對象關係映射,經過ORM咱們能夠經過類的方式去操做數據庫,而不用再寫原生的SQL語句。經過把表映射成類,把行做實例,把字段做爲屬性,ORM在執行對象操做的時候最終仍是會把對應的操做轉換爲數據庫原生語句。使用ORM有許多優勢:html

  1. 易用性:使用ORM作數據庫的開發能夠有效的減小重複SQL語句的機率,寫出來的模型也更加直觀、清晰。
  2. 性能損耗小:ORM轉換成底層數據庫操做指令確實會有一些開銷。但從實際的狀況來看,這種性能損耗不多(不足5%),只要不是對性能有嚴苛的要求,綜合考慮開發效率、代碼的閱讀性,帶來的好處要遠遠大於性能損耗,並且項目越大做用越明顯。
  3. 設計靈活:能夠輕鬆的寫出複雜的查詢。
  4. 可移植性:Django封裝了底層的數據庫實現,支持多個關係數據庫引擎,包括流行的MySQL、PostgreSQL和SQLite。能夠很是輕鬆的切換數據庫。

建立ORM模型:

ORM模型通常都是放在appmodels.py文件中。每一個app均可以擁有本身的模型。而且若是這個模型想要映射到數據庫中,那麼這個app必需要放在settings.pyINSTALLED_APP中進行安裝。如下是寫一個簡單的書籍ORM模型。示例代碼以下:java

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)

以上便定義了一個模型。這個模型繼承自django.db.models.Model,若是這個模型想要映射到數據庫中,就必須繼承自這個類。這個模型之後映射到數據庫中,表名是模型名稱的小寫形式,爲book。在這個表中,有四個字段,一個爲name,這個字段是保存的是書的名稱,是varchar類型,最長不能超過20個字符,而且不能爲空。第二個字段是做者名字類型,一樣也是varchar類型,長度不能超過20個。第三個是出版時間,數據類型是datetime類型,默認是保存這本書籍的時間。第五個是這本書的價格,是浮點類型。
還有一個字段咱們沒有寫,就是主鍵id,在django中,若是一個模型沒有定義主鍵,那麼將會自動生成一個自動增加的int類型的主鍵,而且這個主鍵的名字就叫作idpython

映射模型到數據庫中:

ORM模型映射到數據庫中,總結起來就是如下幾步:
1. 在settings.py中,配置好DATABASES,作好數據庫相關的配置。
2. 在app中的models.py中定義好模型,這個模型必須繼承自django.db.models
3. 將這個app添加到settings.pyINSTALLED_APP中。
4. 在命令行終端,進入到項目所在的路徑,而後執行命令python manage.py makemigrations來生成遷移腳本文件。
5. 一樣在命令行中,執行命令python manage.py migrate來將遷移腳本文件映射到數據庫中。ios

相關文章
相關標籤/搜索