美文网首页
元编程实现ORM

元编程实现ORM

作者: 吃番茄的土拨鼠 | 来源:发表于2019-12-15 10:23 被阅读0次

文章借鉴 [https://www.cnblogs.com/tkqasn/p/6524879.html]

!/usr/bin/python

-- coding: UTF-8 --

class Field(object):
def init(self, name, cl_ype):
self.name = name
self.cl_type = cl_ype

class StringField(Field):

def __init__(self, name):
    super(StringField, self).__init__(name, 'varchar(100)')

class IntField(Field):
def init(self, name):
super(IntField, self).init(name, 'bigint')

class ModelMeta(type):

def __new__(cls, name, base, attr):
    if __name__ == 'Model':
        return super(ModelMeta, cls).__new__(cls, name, base, attr)
    mappings = dict()
    for k, v in attr.iteritems():
        if isinstance(v, Field):
            mappings[k] = v
    for k in mappings.iterkeys():
        attr.pop(k)

    attr['__table__'] = name
    attr['__mappings__'] = mappings
    return super(ModelMeta, cls).__new__(cls, name, base, attr)

class Model(dict):
metaclass = ModelMeta

def __init__(self, **kwargs):
    super(Model, self).__init__(**kwargs)

def __getattr__(self, key):
    try:
        return self[key]
    except KeyError:
        raise AttributeError('{} has not attribut {}'.format(self, key))

def __setattr__(self, key, value):
    self[key] = value

def save(self):
    cls = self.__class__
    field = []
    para = []
    for k, v in cls.__mappings__.iteritems():
        field.append(v.name)
        para.append('?')

    sql = 'insert into {} ({}) values ({})'.format(cls.__table__, ','.join(field), ','.join(para))
    print sql

class User(Model):
name = StringField('name')
age = IntField('age')

u = User(name='liuxue', age=30)
u.save()

相关文章

  • 元编程实现ORM

    文章借鉴 [https://www.cnblogs.com/tkqasn/p/6524879.html] !/u...

  • Django ORM

    ORM(Objects Relational Mapping) 对象关系映射,是一种程序技术,用于实现对象编程语言...

  • Peewee 上手

    peewee是python编写的ORM,ORM是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转...

  • ORM

    ORM(Objects Relational Mapping)对象关系映射,是一种程序技术,用于实现面向对象编程语...

  • Android-数据库-ORM框架

    一.ORM介绍 对象关系映射Object Relational Mapping, 用于实现面向对象编程里不同系统数...

  • Python 元类实现 ORM

    仅供学习,转载请注明出处 元类实现ORM 上一篇章大概讲述了元类的概念,实现使用元类的方式修改一个类的属性大小写修...

  • 2018-12-25

    ORM 对象关系映射(ORM),用于实现面向对象编程里不同类型系统的数据之间的转换。换句话说,就是用面向对象的方式...

  • Django--模型&数据库CRUD

    ORM对象关系映射(Object Relational Mapping)用于实现面向对象编程语言里不同类型系统的数...

  • ORM初识,sqlalchemy操作数据库(一)

    1.ORM的介绍: orm对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从...

  • 009-JDBC,防SQL注入

    DBC JDBC的开发步骤 JDBC代码实现 JDBC实现查询 ORM思想 ORM代码实现 ORM的核心代码 抽取...

网友评论

      本文标题:元编程实现ORM

      本文链接:https://www.haomeiwen.com/subject/gheknctx.html