
## ORM模型介紹
隨著項目越來越大,采用寫原生SQL的方式在代碼中會出現大量的SQL語句,那么問題就出現了:
1.SQL語句重復利用率不高,越復雜的SQL語句條件越多,代碼越長。會出現很多相近的SQL語句。
2.很多SQL語句是在業務邏輯中拼出來的,如果有數據庫需要更改,就要去修改這些邏輯,這會很容易漏掉對某些SQL語句的修改。
3.寫SQL時容易忽略web安全問題,給未來造成隱患。SQL注入。
```
select * from user where username = 'juran'#' and password = ''
select * from user where username = 'juran'-- ' and password = ''
select * from sqldb_book where id = -1 or 1=1
```
ORM,全稱Object Relational Mapping,中文叫做對象關系映射,通過ORM我們可以通過類的方式去操作數據庫,而不用再寫原生的SQL語句。通過把表映射成類,把行作實例,把字段作為屬性,ORM在執行對象操作的時候最終還是會把對應的操作轉換為數據庫原生語句。
```
from django.db import models
# 創建一個模型,對應數據庫中的一張表
class Book(models.Model):
id = models.AutoField()
name = models.CharField(max_length=100)
author = models.CharField(max_length=100)
price = models.FloatField()
# 一個模型的對象,對應數據庫表中的一條數據
book = Book(name="Python",author='龜叔',price=89)
# save方法,保存
book.save()
# delete方法,刪除
book.delete()
```
**使用ORM有許多優點**
1.易用性:使用ORM做數據庫的開發可以有效的減少重復SQL語句的概率,寫出來的模型也更加直觀、清晰。
2.性能損耗小:ORM轉換成底層數據庫操作指令確實會有一些開銷。但從實際的情況來看,這種性能損耗很少(不足5%),只要不是對性能有嚴苛的要求,綜合考慮開發效率、代碼的閱讀性,帶來的好處要遠遠大于性能損耗,而且項目越大作用越明顯。
3.設計靈活:可以輕松的寫出復雜的查詢。
4.可移植性:Django封裝了底層的數據庫實現,支持多個關系數據庫引擎,包括流行的MySQL、PostgreSQL和SQLite。可以非常輕松的切換數據庫。
### 創建ORM模型
ORM模型一般都是放在app的models.py文件中。每個app都可以擁有自己的模型。并且如果這個模型想要映射到數據庫中,那么這個app必須要放在settings.py的INSTALLED_APP中進行安裝。以下是寫一個簡單的書籍ORM模型。
```
from django.db import models
class Book(models.Model):
id = models.AutoField(primary_key=True)
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類型的主鍵,并且這個主鍵的名字就叫做id。
### 映射模型到數據庫中
將ORM模型映射到數據庫中,總結起來就是以下幾步:
1.在settings.py中,配置好DATABASES,做好數據庫相關的配置。
2.在app中的models.py中定義好模型,這個模型必須繼承自django.db.models。
3.將這個app添加到settings.py的INSTALLED_APP中。
4.在命令行終端,進入到項目所在的路徑,然后執行命令python manage.py makemigrations來生成遷移腳本文件。
5.同樣在命令行中,執行命令python manage.py migrate來將遷移腳本文件映射到數據庫中。
- 空白目錄
- 1-Django前導知識
- 1-1-虛擬環境
- 1-2-Django框架介紹與環境搭建
- 2-URL與視圖
- 2-1-URL與視圖
- 3-模板
- 3-1-模板介紹
- 3-2-模板變量
- 3-3-常用標簽
- 3-4-模板常用過濾器
- 3-5-模板結構優化
- 3-6-加載靜態文件
- 4-數據庫
- 4-1-操作數據庫
- 4-2-圖書管理系統
- 4-3-ORM模型介紹
- 4-4-ORM模型的增刪改查
- 4-5-模型常用屬性
- 4-6-外鍵和表
- 4-7-查詢操作
- 4-8-QuerySet的方法
- 4-9-ORM模型練習
- 4-10-ORM模型遷移
- 5-視圖高級
- 1-Django限制請求method
- 2-頁面重定向
- 3-HttpRequest對象
- 4-HttpResponse對象
- 5-類視圖
- 6-錯誤處理
- 6-表單
- 1-用表單驗證數據
- 2-ModelForm
- 3-文件上傳
- 7-session和cookie
- 1-session和cookie
- 8-memcached
- 1-memcached
- 9-阿里云部署
- 阿里云部署