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) 收藏 举报
浙公网安备 33010602011771号