zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Godaddy注册的域名转发、转向教程
    Flash的attachMovie方法
    js出现中文乱码及VS打开js文件乱码的解决方法
    sql2005 COM+ 目录要求 (警告)
    flash读取不同格式xml
    Flash xml 中文乱码
    IXWebHosting的URL转向设置
    引用项目类库时dll.refresh文件的影响
    flash自定义函数
    Microsoft SQL Server 2005 整合、集成SP3方法
  • 原文地址:https://www.cnblogs.com/zhanghaibin16/p/10828652.html
Copyright © 2011-2022 走看看