今日主题:ORM---对象映射关系,来看看Python 是如何实现ORM的。
1、ORM 的作用
通过ORM 将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。
2、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()
输出内容如下:
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()的方法,其他的方法实现大家可以在自己的电脑上去实现,希望本文有一个好的抛砖引玉的效果。
欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!