在之前的文章中我們或多或少的介紹了關於Python的知識,並且到了是實戰中,我們就要用python開發頁面,其實,用框架開發頁面,是最簡單的,也是最輕鬆的。本章,我們就要介紹Python頁面開發中的用orm框架#開發頁面。
什麼是orm
#ORM 即 Object Relational Mapping,全名為物件關係對映。
可是它到底是乾啥的呢?
如果接觸過一些web後台的化,我們知道web後台有很大一部分工作都是資料的增刪改查,如果每次操作資料庫都要連接資料庫,建構sql語句,執行sql語句的話,那未免太麻煩了,所以我們可以將資料庫中的表,字段,行,與我們的物件導向程式設計中的類,類別的屬性,以及物件建立一一對應的映射關係,這樣我們便可以避免直接操作資料庫,而只要呼叫對應的方法就可以了。
拿我過去的做法舉個例子就明白了,比如實現一個用戶註冊,以前我是怎麼做的,前台拿到數據,傳給後台,然後後台字符串拼接形成sql語句,後台執行。
而有了ORM以後,我只需要用資料實例化一個User對象,然後呼叫該對象的save方法,便保存到了資料庫,作為使用者的角度,不需要操作一句sql語句。
假設User類別對應users表
user=User(id="100001",name="Andy",password="*****") user.save() //保存到数据库 user=User.findById("100001") #从数据库中找出id为"100001"的用户 user.update(password="*********") #更改id为"100001"的用户密码 users=User.findAll() #取出users表中全部数据
我就問,這樣用起來不爽嗎?
注意
IO運算皆為非同步,用到的非同步函式庫為asyncio
連結的資料庫為mysql 5.7,用到的mysql異步IO驅動為aiomysql
實作ORM的必要準備---封裝資料庫操作
##建立資料庫連接池
import asyncioimport aiomysql async def create_pool(**kw):global __pool __pool=await aiomysql.create_pool( host=kw.get('host','localhost'), port=kw.get('port',3306), user=kw['user'], password=kw['password'], db=kw['db'], charset=kw.get('charset','utf8'), autocommit=kw.get('autocommit',True), # 自动提交事务 maxsize=kw.get('maxsize',10), # 池中最多有10个链接对象 minsize=kw.get('minsize',1), )
封裝select方法
async def select(sql,args,size=None): //size可以决定取几条 global __pool with (await __pool) as conn: cur=await conn.cursor(aiomysql.DictCursor) # 用参数替换而非字符串拼接可以防止sql注入 await cur.execute(sql.replace('?','%s'),args) if size: rs=await cur.fetchmany(size) else: rs=await cur.fetchall() await cur.close() return rs除了select方法要回傳查詢內容,剩下的update, insert,delete皆只需傳回一個影響行數,所以可將它們三個封裝為一個execute方法
def execute(sql,args): global __pool try: with (await __pool) as conn: cur=await conn.cursor() await cur.execute(sql.replace('?', '%s'), args) affected=cur.rowcount await cur.close() except BaseException as e: raise e return affected
開始動手實作ORM
程式設計中有個想法叫做」自頂向下「。所以當你對如何設計ORM無從下手的時候,你可以假設已經有一個ORM框架,你想怎麼用?
class Model(object): async def find(self): pass class User(Model): # 注意这里的都是类属性 __table__="users" id=StringField(...) name=StringField(...) user=User(id="10001",name="Andy") user.save()有沒有發現,這樣看User類,很清楚,對應user表,這個表有哪些字段,一目了然。然後讓子類別繼承父類,實作對find,save...等方法的複用。真是完美,可是怎麼實現呢?
字段类的实现
class Field(object): def __init__(self,name,column_type,primary_key,default): self.name=name # 字段名 self.column_type=column_type # 字段数据类型 self.primary_key=primary_key # 是否是主键 self.default=default # 有无默认值 def __str__(self): return '<%s:%s>' % (self.__class__.__name__,self.name) class StringField(Field): def __init__(self,name=None,primary_key=False,default=None,ddl='varchar(100)'): super(StringField,self).__init__(name,ddl,primary_key,default) # 其它字段略,一个道理,一个模式
以上是一文詳解Python網站開發會用到哪些orm框架的詳細內容。更多資訊請關注PHP中文網其他相關文章!

numpyArraysareAreBetterFornumericalialoperations andmulti-demensionaldata,而learthearrayModuleSutableforbasic,內存效率段

numpyArraySareAreBetterForHeAvyNumericalComputing,而lelethearRayModulesiutable-usemoblemory-connerage-inderabledsswithSimpleDatateTypes.1)NumpyArsofferVerverVerverVerverVersAtility andPerformanceForlargedForlargedAtatasetSetsAtsAndAtasEndCompleXoper.2)

ctypesallowscreatingingangandmanipulatingc-stylarraysinpython.1)usectypestoInterfacewithClibrariesForperfermance.2)createc-stylec-stylec-stylarraysfornumericalcomputations.3)passarraystocfunctions foreforfunctionsforeffortions.however.however,However,HoweverofiousofmemoryManageManiverage,Pressiveo,Pressivero

Inpython,一個“列表” isaversatile,mutableSequencethatCanholdMixedDatateTypes,而“陣列” isamorememory-sepersequeSequeSequeSequeSequeRingequiringElements.1)列表

pythonlistsandArraysareBothable.1)列表Sareflexibleandsupportereceneousdatabutarelessmory-Memory-Empefficity.2)ArraysareMoremoremoremoreMemoremorememorememorememoremorememogeneSdatabutlesserversEversementime,defteringcorcttypecrecttypececeDepeceDyusagetoagetoavoavoiDerrors。

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。