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

一種Python ORM框架性能測試分析方法研究

2021-10-19 13:22:12賀宗平賀曦冉秦新國
現代信息科技 2021年6期
關鍵詞:數據庫

賀宗平 賀曦冉 秦新國

摘 ?要:在使用Python進行系統應用開發的過程中,對各類型的關系型數據庫,如MySQL、Oracle、SQL Server等的增、刪、改、查操作,需要基于ORM框架規范的概念和模型。因此從安全性、可擴展性等角度分析測試Python社區生態中的多種ORM框架,以及適用于不同的應用場景和條件,并提出對ORM框架性能進行橫向對比測試分析的方法和實例,具有較高的實用價值。

關鍵詞:Python;ORM;數據庫;性能測試

中圖分類號:TP392 ? ? ?文獻標識碼:A 文章編號:2096-4706(2021)06-0083-04

Research on a Test and Analysis Method of Python ORM Framework Performance

HE Zongping,HE Xiran,QIN Xinguo

(Information Office,Nanjing Audit University,Nanjing ?211815,China)

Abstract:In the process of carrying out system application development using Python,the URUD operations on various types of relational database,such as MySQL,Oracle,SQL Server and so on,needs to base on the concept and model of ORM framework specification. Therefore,it is of great practical value to analyze and test many ORM frameworks in Python community ecology from the angles of security and scalability,as well as applying to different application scenarios and conditions,and put forward methods and examples of horizontal comparative test and analysis of ORM framework performance.

Keywords:Python;ORM;database;performance testing

0 ?引 ?言

在利用Python進行Web應用系統進行如網絡數據可視化分析、知識圖譜應用相關的開發過程中,其中涉及大量對各類型數據庫的訪問操作,如MySQL、Oracle、SQL Server等,主要是“增、刪、改、查”(CRUD)。在應用程序開發中,從訪問性能、安全性和可擴展性等方面考慮,對數據庫相關訪問操作往往是通過ORM框架來實現。Python社區生態中有多種ORM框架,適用于不同的應用場景和條件,因此對ORM框架性能進行橫向基準測試分析,在不同的場景需求下選擇適合的ORM框架,對于提升應用系統性能具有重要的價值意義。

1 ?ORM概述

1.1 ?基本概念

在沒有ORM框架條件下,如果系統程序需要操作數據庫,需要在開發中編寫原生SQL語句,并通過數據驅動接口模塊遠程操作數據庫,如圖1所示。

這個數據庫操作過程可以概括為以下幾個步驟:

(1)建立數據庫連接,獲得連接對象。

(2)根據用戶的操作定義組裝SQL執行語句。

(3)用連接對象執行SQL語句,獲得結果集數據對象。

(4)最后釋放連接資源,關閉連接對象。

這種操作流程邏輯復雜、重復度高,并存在注入攻擊等安全風險問題,系統的設計也無法做到業務與數據邏輯分離,不利于降低系統模塊間的緊耦合關系。在系統開發中編寫原生SQL語句會存在數據庫適配遷移問題,例如針對Oracle開發的SQL語句無法平移應用到其他數據庫上,一旦需要遷移改變數據庫類型,會在源代碼層級帶來巨大的變更成本。

1.2 ?ORM作用

為解決Python系統開發數據庫操作的問題,實踐中引入了ORM框架的概念。ORM(Object Relational Mapping)即對象關系映射,通過對各種類型數據庫驅動連接庫進行封裝,避免對數據庫直接編寫SQL的操作,如圖2所示。

主要作用表現在以下幾個方面:

(1)統一訪問接口。通用數據庫交互接口是ORM設計表現核心,使得能夠以統一的方式與各種不同類型的數據庫進行訪問交互,避免了各種不同數據庫SQL語法不同的問題。

(2)簡化訪問方式。ORM封裝提供了完整的數據庫操作細節流程,不再需要開發人員構造煩瑣的數據庫訪問流程。

(3)實現分層模式。ORM解決了面向對象設計與關系型數據庫的匹配問題,建立了對象與關系之間的映射框架,是MVC分層模式中的內存對象持久化存儲具體實現方式。

(4)提高安全特性。由于ORM框架無須用戶自定義拼接SQL語法等操作,從而阻斷了外部的注入攻擊等威脅,提升代碼的安全性。

1.3 ?ORM模型

ORM框架中的類對應簡稱為模型,模型是數據的結構性定義,包含存儲數據的字段類型和方法。每個模型都對應映射到某個數據表,模型中的屬性對應數據表的字段。以Django ORM為例進行CRUD操作示例:

(1)在ORM框架中操作數據,必須先創建模型對應數據庫表。創建示例模型:

class Employee():

id=models.AutoField(primary_key=True)

name=models.CharField(max_length=16)

gender=models.BooleanField(default=1)

birth=models.DateField()

department=models.CharField(max_length=30)

salary=models.DecimalField(max_digits=10,decimal_places=1)

(2)增加記錄:

obj=Employee(name="John",gender=0,birth='1982-01-27',department="信息部",salary=1024)

obj.save()

(3)查詢記錄:查詢所有名字為John的記錄并獲取第一條。

obj=Employee.objects.filter(name="John").first()

print(obj.id,obj.name,obj.birth)

(4)修改記錄:過濾所有名字為John的記錄并將name字段更新為JOHN。

Employee.objects.filter(name="John").update(name= "JOHN")

(5)刪除記錄:過濾出所有名字為EGON的記錄并刪除。

Employee.objects.filter(name="JOHN").delete()

2 ?Python ORM典型框架

2.1 ?Django ORM

Django ORM具備所有ORM框架的重要特性,允許以接近SQL的方式與數據庫交互,操作簡單、簡潔并且開放。在Django中model代表數據信息的來源和結構,包含了存儲數據的重要字段和行為 。通常用一個模型(model)映射到某個數據表,建立模型與數據存儲之間的關聯映射。 Django ORM框架概括起來包括三個方面:

(1)每個模型都是一個Python類,它是django.db. models.Model的子類。

(2)模型的每個屬性都代表一個數據庫字段。

(3)Django為用戶提供了一個自動生成的數據庫訪問API。

2.2 ?Peewee

Peewee是一個輕量級的Python ORM,操作使用直觀。Peewee中一個model類代表一個數據庫的表,一個Field字段代表數據庫中的一個字段,而一個model類實例化對象則代表數據庫中的一行。Peewee使用主要包括兩部分:

(1)定義model。在使用的時候,根據需求先定義好Model,然后可以通過create_tables()創建表,若是已經創建好數據庫表了,可以通過pwiz腳本工具直接創建model。其中,CharField、DateField、BooleanField等這些類型與數據庫中的數據類型一一對應。

(2)操作數據庫。Peewee中的數據模型實例可以直接進行增、刪、改和查的操作。save()對應增加數據;使用delete().where().execute()進行刪除,where()是條件、execute()負責執行語句;使用update().where()進行更新數據;查詢使用select().where(),select()是查詢,where()是條件,get()是獲取第1條數據。

2.3 ?Pony ORM

Pony ORM提供便捷化的查詢語法,實現了自動查詢優化,提供在線的ORM ER實體關系圖編輯器。與Django ORM相比,Pony ORM提供:標識映射模式、自動事務管理、自動緩存查詢和對象、完全支持復合鍵。Pony ORM支持全自動緩存、讀取速度快,缺點是不支持批量插入。

2.4 ?SQLAlchemy ORM

SQLAlchemy ORM是Python中一個使用較為普及的框架庫,具備高性能的數據庫訪問設計,實現了完整的企業級持久模型。SQLAlchemy設計將SQL數據庫的量級和性能放在首位,其次是對象集合的抽象。因此SQLAlchemy不同于其他PythonORM框架所采用的Active Record模型,其采用了近似JavaHibernate的數據映射模型。在SQLAlchemy中,“增刪改查”操作通過DBSession對象來創建完成。

2.5 ?Tortoise ORM

與Python中其他成熟ORM相比,Tortoise ORM是一種異步ORM框架,基于Python中的asyncio異步標準庫實現,支持原生的異步編程。在IO密集型的應用場景中,異步處理方式能提極大地升效率,從而彌補Python運算性能方面的短板。主要特點包括:

(1)開發測試便捷。測試框架使用現有的Python Unittest框架,只需要調用initializer()和finalizer()來設置和刪除測試數據庫。

(2)可組合支持Django模型。

(3)支持多種標準字段。

(4)支持復合查詢API。

3 ?性能測試方法

3.1 ?基本條件

ORM性能測試的首先要考慮以下幾個基本條件:

(1)ORM框架至少支持2個以上的數據,例如MySQL、SQLite。

(2)框架運行環境為Python 3.7。

(3)框架處于積極更新維護中。

(4)能夠生成指定模型的初始DDL。

(5)處理一對多關系。

3.2 ?測試基準

3.2.1 ?測試內容

測試內容包括幾個方面內容:

(1)插入:單條插入(IS),批量插入(IBH),批量導入(IBK)。

(2)過濾:大量數據過濾(FL),少量數據過濾(FS),字典過濾(FD),元組過濾(FT)。

(3)更新:整個結構數據更新(UW),部分字段數據更新(UP)。

(4)刪除:按過濾條件刪除(DL)。

(5)查詢:按過濾條件查詢(GS)。

3.2.2 ?測試數據表

測試操作的數據表包括三種:無關聯關系小型表、有關聯關系小型表、大型表:

(1)無關聯關系小型表(small_table_nr)如表1所示。

(2)有關聯關系小型表(small_table_wr)如表2所示。

(3)大型表(large_table)如表3所示。

3.3 ?測試結果

3.3.1 ?SQLite測試結果

SQLite測試數據結果如表4所示,Peewee和Pony ORM有顯著的性能提升,SQLAlchemy和Django ORM性能表現近似,Tortoise ORM讀取速度慢,創建、更新和刪除操作速度較快。

3.3.2 ?MySQL測試結果

MySQL測試數據結果如表5所示,Peewee和Tortoise ORM有較好的性能表現,Pony ORM性能表現相對更快,SQLAlchemy和Django ORM操作速度則表現相對更慢。

4 ?結 ?論

通過測試數據結果分析,總體來說Pony ORM具有高度優化的性能表現,Django ORM 和SQLAlchemy在性能上表現上相似相近。Tortoise ORM由于采用了異步框架支持,避免了IO讀寫上的等待時間耗費,具有十分出色的性能表現。Python異步框架對于提升數據庫相關操作效率具有十分重要的意義,融合異步技術將是Python ORM框架發展重點方向。

參考文獻:

[1] 楊立苑,李芬,周雪瑩,等.面向氣象Web應用的數據庫訪問性能優化及應用 [J].計算機與數字工程,2020,48(11):2671-2676.

[2] 熊學鋒,彭小慶,曹鑫.基于改進ORM的Oracle數據庫異構資源整合方法研究 [J].電子設計工程,2020,28(21):38-41+46.

[3] 蹇常林.ORM在Django操作數據庫中的應用 [J].技術與市場,2020,27(1):56-57.

[4] 郭顯娥.Django實現ORM模型數據查詢優化 [J].山西大同大學學報(自然科學版),2019,35(3):27-31+36.

[5] 熊偉,歐陽逸,張凌云.一種數據庫訪問代碼自動生成方法 [J].廣州大學學報(自然科學版),2019,18(3):93-95.

[6] 陳忠菊.基于SQLAlchemy的研究和在數據庫編程中的應用 [J].電腦編程技巧與維護,2015(1):62+85.

[7] 郎芳.基于Django技術的自動化測試工具設計與實現 [D].西安:西安電子科技大學,2012.

作者簡介:賀宗平(1982.09—),男,漢族,江蘇南京人,工程師,碩士,主要研究方向:軟件體系架構、數據平臺。

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2010年20期)2010-10-19 01:48:32
主站蜘蛛池模板: 视频二区亚洲精品| 婷婷六月综合| 中文字幕啪啪| 亚洲91精品视频| 久久永久免费人妻精品| 日韩第九页| 无码AV日韩一二三区| 国产精品分类视频分类一区| 国产精品一区在线观看你懂的| 亚洲中久无码永久在线观看软件| 成人午夜网址| 中文字幕日韩丝袜一区| 日韩国产精品无码一区二区三区| 亚洲精品黄| 午夜高清国产拍精品| 欧美日本激情| 婷婷五月在线| 精品伊人久久久香线蕉 | 男女男精品视频| 国产激情无码一区二区三区免费| 亚洲无码高清一区| 9丨情侣偷在线精品国产| 九九视频免费看| 久久精品视频亚洲| 91网址在线播放| 免费国产不卡午夜福在线观看| 夜夜操狠狠操| 国产原创演绎剧情有字幕的| 色婷婷在线播放| 四虎综合网| 国产精品无码制服丝袜| 午夜性爽视频男人的天堂| 色吊丝av中文字幕| 青青草国产一区二区三区| 国产高清毛片| 这里只有精品国产| 中文字幕永久视频| 欧美一级高清免费a| WWW丫丫国产成人精品| 久久亚洲天堂| 毛片a级毛片免费观看免下载| 亚洲第一区欧美国产综合| 色综合日本| 亚洲成年人片| 国禁国产you女视频网站| 狠狠五月天中文字幕| 欧美日韩理论| 黄色成年视频| 中文字幕欧美成人免费| 国产精品入口麻豆| 亚洲日本中文字幕天堂网| 国产成人精品优优av| a毛片基地免费大全| 亚洲不卡av中文在线| 91九色最新地址| 久精品色妇丰满人妻| 色婷婷在线影院| 香蕉伊思人视频| 99久久人妻精品免费二区| 欧美成人手机在线视频| 欧美午夜性视频| 97在线视频免费观看| 欧美特级AAAAAA视频免费观看| 专干老肥熟女视频网站| 四虎免费视频网站| 国产精品亚洲精品爽爽| 久久伊人操| 欧美h在线观看| 99精品福利视频| 在线视频一区二区三区不卡| 欧美一区精品| 不卡无码h在线观看| 国产啪在线91| 国产女人在线视频| 国产办公室秘书无码精品| 免费国产小视频在线观看| 中国国产一级毛片| 欧美五月婷婷| 国产黄网永久免费| 一本大道香蕉高清久久| 强乱中文字幕在线播放不卡| 亚洲欧美精品日韩欧美|