如何使用Python实现一个简易的ORM模型 | 您所在的位置:网站首页 › python数据库框架orm › 如何使用Python实现一个简易的ORM模型 |
ORM框架想必小伙伴们都不陌生,著名的Django就是ORM框架的一个经典案例。那么这个框架是如何实现的呢?今天我们就使用python实现一个简易的ORM模型,通过这个过程来学习ORM框架的相关知识。 使用到的知识 1、元类 2、描述器 元类 对于元类,我的理解其实也便较浅,大概是这个意思 所有的类都是使用元类来进行创建的,而所有的类的父类中必然是object(针对Python3),Python中的元类只有一个(type),当然这里不包含自定义元类 下面我们来看下类的创建 class Test: # 定义一个类 pass Test1 = type("Test2",(object,),{"name":"test"}) # 定义一个类 print(type(Test)) print(type(Test1))-----------------------从上面可以看出创建类,其实是有两种方式,一种是通过class关键字来定义,一种是通过type来进行创建,当然常用的是使用class来进行创建了,在看最后的结果,可以看出类的类型为type。说明我们这个类就是由type来创建的 明白了这个之后我们再来梳理下怎么使用自定义元类来创建类,明白一点,自定义元类需要继承type class MetaClass(type): # 定义一个元类 pass class Test(metaclass=MetaClass): # 使用自定义元类来创建类 pass print(type(Test)) --------------------------很明显可以看出Test类就是用MetaClass类创建出来的 描述器 从描述器的定义来说,只要一个类中实现了__get__、__set__、__delete__中的一个或几个,这个类的实例就可以叫描述器 下面我们来定义一个简易的描述器 class Describer: def __set__(self, instance, value): print("设置属性的时候会被调用") self.value = value def __get__(self, instance, owner): print("获取属性的时候会被调用") return self.value def __delete__(self, instance): print("删除属性的时候会被调用") self.value = None class Test: name = Describer() t = Test() t.name = "xxxxx" print(t.name) ---------------------- 设置属性的时候会被调用 获取属性的时候会被调用 xxxxx从上面的代码中有没有什么想法?既然__set__方法会在我们设置属性的时候会被调用,那么我们是不是可以在设置属性前对这个属性做一些操作呢? ORM模型 ORM模型到底是个啥?ORM对于后端研发来说肯定是不陌生的,包括很多后端框架现在都自带这个模型了 ORM(Object Relational Mapping)对象关系映射 既然是对象关系映射,那对象是啥?我的理解为:Python中的类与数据库之间的映射,对数据的操作就不用编写SQL语言了,因为都封装好了,比如你想插入一条数据,你就直接创建一个对象即可, Python ------->>>> 数据库 类名 ------->>>> 数据库中的表名 对象 ------->>>> 数据库中的一行数据 属性 ------->>>> 数据库中的字段 大致就是上面的映射关系 ORM实现步骤 1、利用描述器实现对数据库字段的类型、长度限制 2、实现Mode类,也就是Python中的类 3、利用元类实现映射关系 好,我们先利用描述器来实现对数据字段的类型,长度限制 class BaseFiled: pass class CharFiled(BaseFiled): """定义一个字符串的类型限制""" def __init__(self, length=10): self.length = length def __set__(self, instance, value): if isinstance(value, str): if len(value) |
CopyRight 2018-2019 实验室设备网 版权所有 |