999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ORM在Django操作數(shù)據(jù)庫中的應(yīng)用

2020-03-02 11:46:47
技術(shù)與市場 2020年1期
關(guān)鍵詞:數(shù)據(jù)庫模型

(西北民族大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,甘肅 蘭州 730100)

1 Django與ORM概述

1.1 Django簡介

Django是由python開發(fā)的免費(fèi)開源網(wǎng)站框架,它的主要目的是簡便、快速的開發(fā)數(shù)據(jù)庫驅(qū)動(dòng)的網(wǎng)站。它強(qiáng)調(diào)代碼復(fù)用,多個(gè)組建可以很方便的以”插件”形式服務(wù)于整個(gè)框架。Django還有很多第三方插件,以至于使它具有很強(qiáng)的擴(kuò)展性。Django遵循MVC的開發(fā)模式。MVC是Model、View、Controller的縮寫,意思是模型、視圖、控制器。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以在Django里更關(guān)注的是模型、模板和視圖,稱為MTB模式。

1.2 ORM簡介

ORM是Object Relational Mapping(對(duì)象關(guān)系映射)。以Python類形式定義的數(shù)據(jù)模型,ORM將模型與關(guān)系數(shù)據(jù)庫連接起來,將得到一個(gè)非常容易使用的數(shù)據(jù)庫API。使用ORM框架操作數(shù)據(jù)庫就不必再寫復(fù)雜的原生SQL語句。原理是將表、行、字段分別映射成類、實(shí)例和屬性,在Django對(duì)數(shù)據(jù)庫進(jìn)行操作時(shí),又將這些對(duì)類、實(shí)例和屬性的操作轉(zhuǎn)化為原生SQL語句。使用ORM優(yōu)點(diǎn)如下。

1)提高開發(fā)效率:ORM框架自動(dòng)實(shí)現(xiàn)Entity實(shí)體的屬性與關(guān)系型數(shù)據(jù)庫字段的映射。CRUD的工作則可以交給ORM來自動(dòng)生成代碼方式實(shí)現(xiàn)。大大提高開發(fā)效率。減少維護(hù)一個(gè)復(fù)雜、缺乏靈活性數(shù)據(jù)訪問層的成本。

2)性能損耗小:ORM轉(zhuǎn)換成底層數(shù)據(jù)庫操作的性能損耗只有5%,但這5%的損耗帶來的收益是很大的,比如提高了開發(fā)效率、使模型更加直觀。

3)設(shè)計(jì)靈活:用簡單的主流編程語言就可以寫出較為復(fù)雜的數(shù)據(jù)查詢語句。只需要面向?qū)ο缶幊蹋恍枰驍?shù)據(jù)庫編寫代碼,對(duì)數(shù)據(jù)庫的操作都轉(zhuǎn)化成對(duì)類屬性和方法的操作,不用編寫各種數(shù)據(jù)庫的sql語句等。

4)操作方便:實(shí)現(xiàn)了數(shù)據(jù)模型與數(shù)據(jù)庫的解耦,屏蔽了不同數(shù)據(jù)庫操作上的差異,不在關(guān)注用的是mysql、oracle等。通過簡單的配置就可以輕松更換數(shù)據(jù)庫,而不需要修改代碼。

2 對(duì)數(shù)據(jù)庫的基本操作

本文將介紹對(duì)數(shù)據(jù)的基本查詢操作與原生SQL語句的對(duì)比。

操作環(huán)境如下:

系統(tǒng):Windows10;Python:3.65;Django:2.0;Pycharm:2019.1。

2.1 ORM的字段類型

屬性名=models.字段類型(定義屬性時(shí)需要指定字段類型,通過字段類型的參數(shù)指定選項(xiàng))

幾個(gè)常用的字段類型如下:

AutoField:自動(dòng)增長的IntegerField,不指定時(shí)Django會(huì)自動(dòng)創(chuàng)建屬性名為id的自動(dòng)增長屬性。

IntegerField:整數(shù)

FloatField():浮點(diǎn)數(shù)

CharField(max_length=20):字符串(參數(shù)max_length表示最大字符個(gè)數(shù))

BooleanField:布爾字段,值為True或False

2.2 常用字段選項(xiàng)

null:如果為True,表示允許為空,默認(rèn)值是False。

default:默認(rèn)值,這可以是值或可調(diào)用對(duì)象。如果可調(diào)用,則每次創(chuàng)建新對(duì)象時(shí)都會(huì)調(diào)用它。

primary_key:若為True,則該字段會(huì)成為模型的主鍵字段,默認(rèn)值是False,一般作為AutoField的選項(xiàng)使用。

2.3 創(chuàng)建ORM模型

在使用python manage.py startapp 創(chuàng)建一個(gè)新的app之后,系統(tǒng)會(huì)自動(dòng)生成一個(gè)用于存放ORM模型的模板文件models.py,在這個(gè)文件中編寫ORM模型。

2.4 將ORM模型映射到數(shù)據(jù)庫中

1)在setting.py中,配置好DATABASS,做好數(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和migrate來生成遷移腳本文件。

執(zhí)行上述步驟之后,數(shù)據(jù)庫中就已經(jīng)生成名字為Book的表。

3 ORM實(shí)際操作及與原生SQL語句對(duì)比

1)建立學(xué)生表,教師表,課程表,成績表四張表,并保存幾條基本數(shù)據(jù)。字段如下:

學(xué)生表(id,name,gender)

教師表(id,name)

成績表(id,number,course_id,student_id)

課程表(id,name,teacher_id)

2)查詢學(xué)過id為6的老師所教的所有課程的學(xué)生姓名。

3)這是一個(gè)用原生SQL語句相對(duì)于很復(fù)雜的一個(gè)查詢,如使用原生SQL語句,則查詢代碼如下

″SELECT ′student′.′name′ FROM ′student′ LEFT OUTER JOIN ′score′ ON

(′student′.′id′ = ′score′.′student_id′) LEFT OUTER JOIN ′course′

ON (′score′.′course_id′ = ′course′.′id′) LEFT OUTER JOIN ′teacher′ ON

(′course′.′teacher_id′ = ′teacher′.′id′) GROUP BY ′student′

.′id′ HAVING COUNT(CASE WHEN (′teacher′.′id′=′6′)

THEN ′score′.′course_id′ ELSE NULL END) = 2 ORDER BY NULL LIMIT 21″

從代碼的數(shù)量上看就已經(jīng)很復(fù)雜,這里就不再對(duì)原生SQL語句進(jìn)行翻譯。

4)對(duì)使用ORM查詢進(jìn)行一個(gè)簡單的思路說明。要想得到查詢結(jié)果,先將id為6的老師所教的課程數(shù)量進(jìn)行查詢,再將每位同學(xué)所學(xué)黃老師課程數(shù)量進(jìn)行查詢,兩者進(jìn)行匹配,匹配相符的結(jié)果則為學(xué)習(xí)id為6的老師所有課程的學(xué)生。ORM代碼如下:

Student.objects.annotate(num1=Count("score__course",filter=Q(score__course__teacher__name='6'))) .filter(num1=Teacher.objects.filter(course__teacher

_id=6).count()).values('name')

相比原生SQL語句代碼量已經(jīng)減少了很多,且代碼中大部分是python語句,而更大的優(yōu)勢(shì)則是它的易讀性,邏輯關(guān)系看完代碼之后很快就可以明白。使用ORM的優(yōu)勢(shì)相比起原生SQL語句一目了然。

ORM框架在使得Django的操作簡單、便捷中起到了重要的作用,上文中所演示的對(duì)數(shù)據(jù)增刪改查基本操作中,沒有出現(xiàn)原生SQL語句。它的簡單、精確、易懂、易用無疑是開發(fā)者的首選。當(dāng)我們實(shí)現(xiàn)任何一個(gè)較為大型的項(xiàng)目時(shí),會(huì)編寫大量的數(shù)據(jù)訪問層的代碼來對(duì)數(shù)據(jù)進(jìn)行增刪改查,而這些代碼卻是重復(fù)的。當(dāng)我們熟練掌握ORM之后,則會(huì)大大減少代碼的重復(fù)性,從而進(jìn)一步的提高開發(fā)效率。

4 結(jié)語

ORM還有很多優(yōu)點(diǎn)例如安全性、可移植性等在文中沒有探究。ORM模型只是構(gòu)成Django如此簡便易用的特點(diǎn)的其中一部分,在需要高效開發(fā)web的時(shí)代,Django一定會(huì)越來越受大家歡迎。

猜你喜歡
數(shù)據(jù)庫模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
數(shù)據(jù)庫
數(shù)據(jù)庫
3D打印中的模型分割與打包
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
FLUKA幾何模型到CAD幾何模型轉(zhuǎn)換方法初步研究
主站蜘蛛池模板: 婷婷六月综合| 国产91视频观看| 国产91高清视频| 亚洲男人的天堂网| yjizz视频最新网站在线| 在线看片国产| 国产激爽大片在线播放| 高清无码一本到东京热| 波多野结衣一区二区三区AV| 亚洲人成电影在线播放| 亚洲精品图区| 亚洲国产看片基地久久1024| 国产亚洲欧美在线专区| 亚洲高清国产拍精品26u| 人人91人人澡人人妻人人爽| 欧美成人精品高清在线下载| 真实国产乱子伦高清| 在线综合亚洲欧美网站| 日韩国产综合精选| 毛片在线看网站| 老司机午夜精品网站在线观看| 精品精品国产高清A毛片| 日韩无码黄色| 国产美女91视频| 国产精品蜜芽在线观看| 欧美亚洲国产日韩电影在线| 国产成人亚洲精品无码电影| 久久成人国产精品免费软件| 日韩毛片在线播放| 中文无码精品a∨在线观看| 天天操天天噜| 欧美激情视频二区| a毛片在线播放| 亚洲一本大道在线| 亚洲欧美国产五月天综合| 国产日产欧美精品| 久无码久无码av无码| 91成人在线观看视频| 成人伊人色一区二区三区| 欧美日韩国产高清一区二区三区| 老司机精品99在线播放| 亚洲swag精品自拍一区| 国产肉感大码AV无码| 国产精彩视频在线观看| 亚洲国产av无码综合原创国产| 五月婷婷亚洲综合| 国产亚洲视频播放9000| 午夜久久影院| 美女扒开下面流白浆在线试听 | 伊人久久青草青青综合| 亚洲欧美在线精品一区二区| 国产十八禁在线观看免费| 国产男女免费视频| 亚洲天堂啪啪| 中文字幕在线一区二区在线| 国产在线拍偷自揄拍精品| 免费高清自慰一区二区三区| 亚洲成年人片| 亚洲综合在线最大成人| 亚洲第一视频免费在线| 中文字幕在线视频免费| 91在线国内在线播放老师 | 欧美视频在线观看第一页| 色综合中文| h网站在线播放| 日韩无码真实干出血视频| 亚洲另类国产欧美一区二区| 国产电话自拍伊人| 国产精品尤物在线| 免费在线a视频| 黄色网站不卡无码| 国内黄色精品| 国产免费好大好硬视频| 亚洲国产在一区二区三区| 国产成人精品无码一区二| 五月婷婷综合网| 女同久久精品国产99国| 国产视频你懂得| 直接黄91麻豆网站| 亚洲成年人片| 欧美午夜一区| 国产国语一级毛片|