• 【Python学习之八】ORM


    ORM

    什么是ORM呢?

      ORM全称是:Object-Relational Mapping。即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表。这样,写代码更简单,不用直接操作SQL语句。十分方便python的Web开发。通过编写ORM框架,我们可以通过定义一个User类来操作对应的数据库表User,因此可以写出这样的代码:

    # 创建实例:
    user = User(id=123, name='Michael')
    # 存入数据库:
    user.insert()
    # 查询所有User对象:
     users = User.findAll() 

      这样,我们就可以使用OOP来操作数据库了。上述代码中,User类负责收集数据,并尝试归类出这些数据对应数据库表的映射关系,类如对应表的字段(包含名字、类型、是否为表的主键、默认值)等。它的基类负责执行操作,比如数据库的存储、读取,查找等操作,如上述的存储数据: user.insert() ,查找数据: users = User.findAll() 。元类负责分类、整理收集的数据并以此创建一些类属性(如SQL语句)供基类作为参数,其中,元类是运行时动态创建的。

    元类(metaclass)

      元类是动态创建类的方法一种,另一种是通过type()函数动态创建。type()函数既可以返回一个对象的类型,又可以创建出新的类型。比如,我们可以通过type()函数创建出Hello类,而无需通过class Hello(object)...的定义。使用type()动态创建类,即一个class对象,需要传入三个参数:(1)class的名称;(2)继承的父类集合;(3)class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上。通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。

    >>> def fn(self, name='world'): # 先定义函数
    ...     print('Hello, %s.' % name)
    ...
    >>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class
    >>> h = Hello()
    >>> h.hello()
    Hello, world.
    >>> print(type(Hello))
    <class 'type'>
    >>> print(type(h))
    <class '__main__.Hello'>

      接下来,我们梳理一下:类、实例、元类的关系。我们都知道,先定义类,再创建类的实例;同理,元类和类的关系是,先定义元类,再创建类。连接起来就是:先定义metaclass,就可以创建类,最后创建实例。所以,元类(metaclass)允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出来的“实例”。

  • 相关阅读:
    【bzoj1036】【ZJOI2008】树的统计
    AE基础(8)PageLayout属性设置和添加元素
    AE基础(7)布局控件与地图控件关联
    UtilityAction扩展
    UtilityAction
    AE基础(6)数据查询与选择
    NavigationAction
    LayerAction
    AE基础(5)鹰眼功能
    AE基础(4)画几何图形
  • 原文地址:https://www.cnblogs.com/cjvae/p/9361372.html
Copyright © 2020-2023  润新知