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

 

转载于:https://www.cnblogs.com/zhanghaibin16/p/10828652.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值