ORM框架

 1 ..\orm\mysql_config.py
 2 
 3 def set_mysql_config(env):
 4     if env=='pro':
 5         db_config={
 6             'user':'root',
 7             'password':'*',
 8             'host':'127.0.0.1',
 9             'port':3306,
10             'db':'book'
11         }
12     elif env=='test':
13         db_config = {
14             'user': 'root',
15             'password': '*',
16             'host': '127.0.0.1',
17             'port': 3306,
18             'db': 'book'
19         }
20     return db_config

 

  1 from DBUtils.PooledDB import PooledDB
  2 import pymysql
  3 from Website.orm.mysql_config import set_mysql_config
  4 from Website.test_case.modle.function import get_logger
  5 
  6 logger=get_logger()
  7 
  8 def create_pool():
  9     db_config=set_mysql_config('test')
 10     return PooledDB(pymysql,5,user=db_config['user'],
 11                     password=db_config['password'],
 12                     host=db_config['host'],
 13                     port=db_config['port'],
 14                     db=db_config['db']
 15                     ).connection()
 16 
 17 
 18 class Filed():
 19     def __init__(self,column_name,column_type):
 20         self.column_name=column_name
 21         self.column_typr=column_type
 22 
 23 class ModleMetaclass(type):
 24     def __new__(cls, table_name,bases,attrs):
 25         if table_name=='Modle':
 26             return type.__new__(cls, table_name,bases,attrs)
 27 
 28         mapping={}
 29         for k,v in attrs.items():
 30             if isinstance(v,Filed):
 31                 mapping[k]=v
 32 
 33         for k in mapping.keys():
 34             attrs.pop(k)
 35 
 36         attrs['__mapping__']=mapping
 37         attrs['__table__']=table_name.lower()
 38 
 39         return type.__new__(cls,table_name,bases,attrs)
 40 
 41 class Modle(dict,metaclass=ModleMetaclass):
 42     def __init__(self,**awk):
 43         super().__init__(**awk)
 44 
 45     # insert into table_name (字段名称) values (值)
 46     def insert(self,column_list,param_list):
 47         logger.info('执行inset方法:insert into {}({}) values ({})'.format(self.__table__,column_list,param_list))
 48 
 49         for key in column_list:
 50             if key not in self.__mapping__.keys():
 51                 raise RuntimeError('这个字段没有发现 field not found')
 52 
 53         # 检查参数的合法性   "value"
 54         args = self.__check_params(param_list)
 55 
 56         sql='insert into {}({}) values ({})'.format(self.__table__,','.join(column_list),','.join(args))
 57         res=self.__do_excute(sql)
 58         logger.info(res)
 59 
 60     def __check_params(self,param_list):
 61         args = []
 62         for key in param_list:
 63             key = '\"' + key + '\"'
 64             args.append(key)
 65         return args
 66 
 67     def __do_excute(self, sql):
 68         a = create_pool()
 69         cosor = a.cursor()
 70         if 'select' in sql:
 71             cosor.execute(sql)
 72             res = cosor.fetchall()
 73         else:
 74             res = cosor.execute(sql)
 75         a.commit()
 76         a.close()
 77 
 78         return res
 79 
 80     def select(self, column_list, where_list):
 81         logger.info('执行select方法:select {} from {} where {}'.format(column_list, self.__table__, where_list))
 82 
 83         for key in column_list:
 84             if key not in self.__mapping__.keys():
 85                 raise RuntimeError('这个字段没有发现 field not found')
 86 
 87         sql = 'select {} from {} where {}'.format(','.join(column_list), self.__table__, 'and'.join(where_list))
 88         res = self.__do_excute(sql)
 89         logger.info(res)
 90 
 91     def update(self, set_column_list, where_list):
 92         logger.info('执行update方法:update {} set {} where {}'.format(self.__table__, set_column_list, where_list))
 93 
 94         sql = 'update {} set {} where {}'.format(self.__table__, 'and'.join(set_column_list),
 95                                                  'and'.join(where_list))
 96         res = self.__do_excute(sql)
 97         logger.info(res)
 98 
 99     def delete(self, where_list):
100         logger.info('执行delete方法:delete from {} where {}'.format(self.__table__, where_list))
101 
102         sql = 'delete from {} where {}'.format(self.__table__, 'and'.join(where_list))
103         res = self.__do_excute(sql)
104         logger.info(res)
105 
106 class Good(Modle):
107     computer_part = Filed('computer_part', 'varchar(20)')
108     computer_info = Filed('computer_info', 'text')
109 
110 
111 if __name__ == '__main__':
112 
113     goods=Good()
114     # goods.insert(['computer_part','computer_info'],['组件','组件信息'])
115     goods.select(['computer_part','computer_info'],['id=4'])
116     # goods.update(['computer_part="组件3"'],['id=4'])
117     # goods.delete(['id=5'])

 

posted on 2019-07-13 12:02  cherry_ning  阅读(204)  评论(0)    收藏  举报

导航