一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - django的ORM模型的實(shí)現(xiàn)原理

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

2021-06-04 00:18小短腿電工 Python

這篇文章主要介紹了django的ORM模型的實(shí)現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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時容易忽略web安全問題,給未來造成隱患。SQL注入。

ORM ,全稱 Object Relational Mapping ,中文叫做對象關(guān)系映射,通過 ORM 我們可以通過類的方式去操作數(shù)據(jù)庫,而不用再寫原生的SQL語句。通過把表映射成類,把行作實(shí)例,把字段作為屬性, ORM 在執(zhí)行對象操作的時候最終還是會把對應(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),支持多個關(guān)系數(shù)據(jù)庫引擎,包括流行的 MySQL 、 PostgreSQL 和 SQLite 。可以非常輕松的切換數(shù)據(jù)庫。

創(chuàng)建ORM模型

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

?
1
2
3
4
5
6
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 ,如果這個模型想要映射到數(shù)據(jù)庫中,就必須繼承自這個類。這個模型以后映射到數(shù)據(jù)庫中,表名是模型名稱的小寫形式,為 book 。在這個表中,有四個字段,一個為 name ,這個字段是保存的是書的名稱,是 varchar 類型,最長不能超過20個字符,并且不能為空。第二個字段是作者名字類型,同樣也是 varchar 類型,長度不能超過20個。第三個是出版時間,數(shù)據(jù)類型是 datetime 類型,默認(rèn)是保存這本書籍的時間。第五個是這本書的價格,是浮點(diǎn)類型。

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

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

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

  1. 在 settings.py 中,配置好 DATABASES ,做好數(shù)據(jù)庫相關(guān)的配置。
  2. 在 app 中的 models.py 中定義好模型,這個模型必須繼承自 django.db.models 。
  3. 將這個 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í)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.jianshu.com/p/38a2f24e8f4f

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产区成人综合色在线 | 莫莉瑞典1977k| 91看片淫黄大片.在线天堂 | 美国复古性xxxx | 国产成人精品日本亚洲网站 | 欧美日韩中文国产一区 | 欧美同志gaypronvideos | 国产自拍影院 | 69短视频 | 无人区在线观看免费完整版免费 | 免费人成网址在线观看国内 | 国产va免费精品高清在线观看 | 国产毛片在线高清视频 | 人人揉揉香蕉 | 大学生情侣在线 | 激情视频图片小说qvdo | 国产福利自产拍在线观看 | 高中生放荡日记高h娜娜 | 忘忧草在线社区WWW日本直播 | 国产自产一区c | 成人丁香婷婷 | 日本红怡院亚洲红怡院最新 | 日本一卡二卡3卡四卡网站精品 | 国产高清自拍 | 亚洲一成人毛片 | 国产成人yy精品1024在线 | 2021最新国产成人精品视频 | 久久久无码精品亚洲A片猫咪 | 亚洲国产成人久久精品hezyo | 成人资源在线观看 | 日日操日日舔 | 美女和男人免费网站视频 | 麻豆网站视频国产在线观看 | 亚洲天堂视频在线观看 | 人人斗地主| 免费在线观看成年人视频 | 丝袜足液精子免费视频 | 日韩无砖专区体验区 | 18无删减羞羞网站动漫 | 蜜桃88av | 亚洲香蕉伊在人在线观婷婷 |