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)
    
    
    
    
    
    
    
    
  • 相关阅读:
    Debian安装autoconf
    Linux 解决 bash ./ 没有那个文件或目录 的方法
    C语言strtok()函数:字符串分割
    java.util.logging.Logger使用详解 (转)
    java中Logger.getLogger(Test.class)
    jquery ajax中success与complete的执行顺序 (转)
    navicat如何导入sql文件和导出sql文件
    MySQL修改root密码的多种方法(转)
    查看三种MySQL字符集的方法(转)
    mysql 5.7.13 安装配置方法图文教程(linux) (转)
  • 原文地址:https://www.cnblogs.com/agsol/p/11795500.html
Copyright © 2011-2022 走看看