点击上方蓝字,关注:无量测试之道
做者 | 无量测试之道
编辑 | 小 晴
这是无量测试之道的第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源创计划”,欢迎正在阅读的你也加入,一块儿分享。