python对象关系映射ORM

ORM全称Object Relational Mapping, 即对象关系映射。就是把关系数据的一行映射为一个对象,也就是一个类对应一张表,这样,就无需直接操作SQL语句。

ORM框架底层的所有类都是动态的,这是为了支持使用者根据表定义出类,

当用户定义一个class User(Model)时,Python解释器首先在当前类User的定义中查找metaclass,

如果没有找到,就继续在父类Model中查找metaclass,

找到了,就使用Model中定义的metaclass的ModelMetaclass来创建User类,也就是说,metaclass可以隐式地继承到子类,但子类自己却感觉不到。

在ModelMetaclass中,一共做了几件事情:

  排除掉对Model类的修改;
  在当前类(比如User)中查找定义的类的所有属性,如果找到一个Field属性,就把它保存到一个__mappings__的dict中,同时从类属性中删除该Field属性,否则,容易造成运行时错误(实例的属性会遮盖类的同名属性);
  把表名保存到__table__中,这里简化为表名默认为类名。

Python目前比较流行的ORM框架主要是SQLAlchemy框架,它可以兼容MySQL、SQLite、Oracle等多种关系型数据库。

使用Metaclass自定义简单的ORM
IntField和CharField属于数据属性描述符。
ModelMetaClass是定义的元类,必须继承type,new函数调用type创建并返回创建的类。
BaseModel参数中需要使用metaclass指定ModelMetaClass元类。
User 继承BaseModel,运行时BaseModel和User两个类先后根据元类ModelMetaClass被动态创建。
new方法是在init方法之前被调用,new方法用于创建类,init方法用户初始化类的对象实例。

https://blog.csdn.net/paopaohll/article/details/83178346

猜你喜欢

转载自www.cnblogs.com/zhanghaibin16/p/10828652.html