zoukankan      html  css  js  c++  java
  • orm1.0

    class Field:
        def __init__(self,name,column_type,primary_key,defaule):
            self.name = name
            self.column_type = column_type
            self.primary_key = primary_key
            self.default = defaule
    
    class IntegerField(Field):
        def __init__(self,name,column_type = 'int',primary_key = False,default = 0):
            super().__init__(name,column_type,primary_key ,default )
    
    class StringField(Field):
        def __init__(self,name,column_type = 'varchar(64)',primary_key = False,default = None):
            super().__init__(name,column_type,primary_key ,default )
    
    
    class OrmMetaClass(type):
        def __new__(cls, class_name,class_bases,class_attr):
    
            if class_name == 'Models':
                return type. __new__(cls, class_name,class_bases,class_attr)
    
            table_name = class_attr.get('table_name',class_name)
    
            primary_key = None
            mappings = {}
    
            for k,v in class_attr.items():
                if isinstance(v,Field):
                    mappings[k] = v
                    if v.primary_key:
                        if primary_key:
                            raise TypeError('only need one primary key')
    
                        primary_key = v.primary_key
    
            for k in mappings:
                class_attr.pop(k)
    
            if  not primary_key:
                raise TypeError('a primary key is necessary')
    
            class_attr['primary_key'] = primary_key
            class_attr['table_name'] = table_name
            class_attr['mappings'] = mappings
    
            return type.__new__(cls, class_name,class_bases,class_attr)
    
    
    
    class Models(dict,metaclass=OrmMetaClass):
        def __init__(self,**kwargs):
            super().__init__(**kwargs)
    
    
        def __getattr__(self, item):
            return self.get(item)
    
        def __setattr__(self, key, value):
            self[key] = value
    
    
    class User(Models):
        user_id = IntegerField(name = 'user_id',primary_key=True)
        user_name = StringField(name = 'user_name',)
        user_pwd = StringField(name = 'user_pwd')
    
    if __name__ == '__main__':
        user = User()
        user.name = 'agsol'
        user.id = 1
        user.pwd = '123'
    
        print(user)
        print(user.name)
    
    
    
    
    
    
    
    
  • 相关阅读:
    jsp内置对象
    Response响应
    中医不传之秘
    slam-四元运动学
    ubuntu 16.04 设置 win+e 快捷键打开文件夹管理器
    ubuntu16.04 更新nvidia 显卡驱动后显示 clean ... files ... blocks ... /sys/class/backlight/nvidia_0/actural_brightness
    android studio 引入模块失败解决方法
    gradle
    python logger
    ubuntu自定义终端风格
  • 原文地址:https://www.cnblogs.com/agsol/p/11795500.html
Copyright © 2011-2022 走看看