亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

        1 Django與ORM概述

        1.1 Django簡介

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

        1.2 ORM簡介

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

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

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

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

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

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

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

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

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

        2.1 ORM的字段類型

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

        幾個常用的字段類型如下:

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

        IntegerField:整數(shù)

        FloatField():浮點數(shù)

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

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

        2.2 常用字段選項

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

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

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

        2.3 創(chuàng)建ORM模型

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

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

        1)在setting.py中,配置好DATABASS,做好數(shù)據(jù)庫相關(guān)配置。

        2)在app中的models.py中定義好模型,這個模型必須繼承自django.db.models。

        3)將這個app添加到settings.py的INSTALLED_APP中。

        4)在命令行終端,進入到項目所在的路徑,然后執(zhí)行命令 python manage.py makemigrations和migrate來生成遷移腳本文件。

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

        3 ORM實際操作及與原生SQL語句對比

        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)這是一個用原生SQL語句相對于很復(fù)雜的一個查詢,如使用原生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ù)雜,這里就不再對原生SQL語句進行翻譯。

        4)對使用ORM查詢進行一個簡單的思路說明。要想得到查詢結(jié)果,先將id為6的老師所教的課程數(shù)量進行查詢,再將每位同學(xué)所學(xué)黃老師課程數(shù)量進行查詢,兩者進行匹配,匹配相符的結(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)勢則是它的易讀性,邏輯關(guān)系看完代碼之后很快就可以明白。使用ORM的優(yōu)勢相比起原生SQL語句一目了然。

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

        4 結(jié)語

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

        猜你喜歡
        數(shù)據(jù)庫模型
        一半模型
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
        數(shù)據(jù)庫
        財經(jīng)(2017年15期)2017-07-03 22:40:49
        數(shù)據(jù)庫
        財經(jīng)(2017年2期)2017-03-10 14:35:35
        3D打印中的模型分割與打包
        數(shù)據(jù)庫
        財經(jīng)(2016年15期)2016-06-03 07:38:02
        數(shù)據(jù)庫
        財經(jīng)(2016年3期)2016-03-07 07:44:46
        數(shù)據(jù)庫
        財經(jīng)(2016年6期)2016-02-24 07:41:51
        FLUKA幾何模型到CAD幾何模型轉(zhuǎn)換方法初步研究
        久久精品国产网红主播| 精品熟女视频一区二区三区国产| 国产天堂av在线一二三四| 亚洲加勒比久久88色综合| 久久免费看少妇高潮v片特黄| 国产亚洲精品久久久ai换| 综合网自拍| 国内成人精品亚洲日本语音| 日本激情久久精品人妻热| 丝袜美腿在线观看一区| 亚洲av成人中文无码专区| 国产一级毛片卡| 亚洲av午夜福利一区二区国产| 国产精品一区二区三区自拍| 天天躁日日躁狠狠很躁| 国产成人无码A区在线观| 97超碰中文字幕久久| 女人的精水喷出来视频| 国产人在线成免费视频| 欧洲人体一区二区三区| 久久人妻中文字幕精品一区二区| 日本妇人成熟免费2020| 亚洲av成人一区二区三区| 亚洲av无码专区在线亚| 国产另类人妖在线观看| 亚洲国产aⅴ成人精品无吗| 狠狠色婷婷久久一区二区| 亚洲每天色在线观看视频| 99精品国产一区二区三区| 2019最新中文字幕在线观看| 美女高潮无遮挡免费视频| 国产精品女同学| 亚洲一区二区三区2021| 中国丰满熟妇xxxx性| 无码不卡一区二区三区在线观看| 水蜜桃在线观看一区二区国产| 无码a级毛片免费视频内谢| 亚洲精品久久久久高潮| 天堂视频一区二区免费在线观看| 国内精品免费一区二区三区 | 亚洲国产精品久久久久秋霞影院|