點擊上方藍字,關注:無量測試之道
做者 | 無量測試之道
編輯 | 小 晴
這是無量測試之道的第156篇原創
今日主題:ORM---對象映射關係,來看看Python 是如何實現ORM的。
web
一、ORM 的做用
經過ORM 將編程語言的對象模型和數據庫的關係模型創建映射關係,這樣咱們在使用編程語言對數據庫進行操做的時候能夠直接使用編程語言的對象模型進行操做就能夠了,而不用直接使用sql語言。sql
二、ORM 的優缺點:
優勢:數據庫
隱藏了數據訪問細節,「封閉」的通用數據庫交互,ORM的核心。它使得咱們的通用數據庫交互變得簡單易行,而且徹底不用考慮該死的SQL語句。快速開發,由此而來。
ORM使咱們構造固化數據結構變得簡單易行。編程
缺點:微信
無可避免的,自動化意味着映射和關聯管理,代價是犧牲性能。如今的各類ORM框架都在嘗試使用各類方法來減輕這塊(LazyLoad,Cache),效果仍是很顯著的。網絡
實現代碼以下:數據結構
1class ORM():
2 #定義一個超類
3 def save(self):
4 print(self.__class__.__name__)#打印調用的save方法的實例的類名,用類名做爲表名
5 print(self.__dict__)#打印調用此方法的實例的屬性及值信息
6 tablename=(self.__class__.__name__).lower()
7 columns="("
8 values="("
9 for column in self.__dict__:#遍歷字典(屬性與值)信息,組裝成columns(字段名) and values(值)
10 columns += (column+",")
11 if isinstance(self.__dict__[column],str):#判斷字段是否是string類型
12 values += "'"+self.__dict__[column]+"',"
13 else:
14 values += str(self.__dict__[column])+","
15 columns=columns[:len(columns)-1]+")"
16 values=values[:len(values)-1]+")"
17 sql="insert into "+tablename+" "+columns+" value "+values
18 print(sql)#若是是入庫操做,在這裏替換成db cursor來執行sql便可。
19
20class User(ORM):
21 # 繼承之上面定義的類,能夠在實例化後直接調用save()保存方法
22 def __init__(self,name,grade,age,score):
23 self.name=name
24 self.grade=grade
25 self.age=age
26 self.score=score
27
28if __name__ == '__main__':
29 u1=User("tony",6,12,99)
30 u1.save()
app
輸出內容以下:框架
1User
2{'name': 'tony', 'grade': 6, 'age': 12, 'score': 99}
3insert into user (name,grade,age,score) value ('tony',6,12,99)
編程語言
總結:本文只是從Python 自身代碼上去實現ORM的邏輯,且只實現了一個save()的方法,其餘的方法實現你們能夠在本身的電腦上去實現,但願本文有一個好的拋磚引玉的效果。
若是今天的分享對你有幫助的話,請堅決果斷:關注、分享、點贊、在看、收藏呀~
你的鼓勵將會是我創做的最大動力。
點個贊,點個在看再走吧~~~
本文分享自微信公衆號 - 無量測試之道(gh_858a1aa25a6d)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。