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)
    
    
    
    
    
    
    
    
  • 相关阅读:
    js判断undefined类型
    js replace 全部替换
    第五次作业--原型设计
    第三次作业--团队展示
    第二次作业——数独终盘
    软件工程实践2017第一次作业
    课堂作业2
    课堂作业1
    第四次作业 计算器第二步
    第三次作业
  • 原文地址:https://www.cnblogs.com/agsol/p/11795500.html
Copyright © 2011-2022 走看看