def delete(self, sql, params=None, cursor_mode=CursorMode.CURSOR_MODE): if sql.upper().startswith('DROP') | sql.upper().startswith( 'CREATE') | sql.upper().startswith('INSERT') | sql.upper( ).startswith('SELECT') | sql.upper().startswith('UPDATE'): raise DBError(key=DBErrorType.OPERATE_NOT_SUPPORT_ERROR, message='Not support this operate') conn = None cursor = None try: delete_result = self.__execute(sql=sql, params=params, cursor_mode=cursor_mode) conn = delete_result['conn'] cursor = delete_result['cursor'] self.__commit_connection() return cursor.rowcount except DBError as e: raise e except Exception as e: reraise(DBError(e, sql=sql, params=params), sys.exc_info()[2]) finally: if cursor: cursor.close() if conn: self.__close_connection()
def build_update_sql(self, models=[], columns=[], where='', params=None): if len(models) > 0: # 批量更新 sql = '' columns = models[0].get_attrs().keys() if len(columns) <= 0: raise DBError(key=DBErrorType.SQL_BUILD_ERROR, message='Not found any columns to update.') else: for model in models: params = [] for column in columns: if column != self.primary_key: params.append(model.get_attr(column)) primary_value = model.get_attr(self.primary_key) params.append(primary_value) sql += self.get_dialect().update( columns=columns, table=self.table_name, alias=self.table_alias, where='`%s` = %s;' % (self.primary_key, primary_value)) else: sql = self.get_dialect().update(columns=columns, table=self.table_name, alias=self.table_alias, where=where) return sql, params
def get_executor(db_config): key = ExecutorFactory.__get_pool_key(db_config) if key not in ExecutorFactory.__connection_pools: ExecutorFactory.__lock.acquire() try: _db_config = db_config.copy() if 'password' in _db_config: _db_config['password'] = '******' logger.info('Init db pool info - db config: %s' % str(_db_config)) target = db_config['target'] del db_config['target'] show_sql = db_config['show_sql'] del db_config['show_sql'] pool = ConnectionPool(target=target, **db_config) ExecutorFactory.__connection_pools[key] = Executor( pool=pool, show_sql=show_sql) ExecutorFactory.__lock.notifyAll() except Exception as e: reraise(DBError(e), sys.exc_info()[2]) finally: ExecutorFactory.__lock.release() return ExecutorFactory.__connection_pools[key]
def update(self, columns, table, alias, where): if columns is None or len(columns) == 0: raise DBError('Could not found columns to update.') where = self.get_where(where=where) return 'UPDATE %s%s SET %s%s%s' % ( table, self.get_alias(alias), '=%s, '.join( self.get_prefix(alias, columns)), '=%s', where)
def insert(self, sql, params=None, execute_mode=ExecuteMode.ONE_MODE, cursor_mode=CursorMode.CURSOR_MODE): if sql.upper().startswith('DROP') | sql.upper().startswith( 'CREATE') | sql.upper().startswith('SELECT') | sql.upper( ).startswith('UPDATE') | sql.upper().startswith('DELETE'): raise DBError(key=DBErrorType.OPERATE_NOT_SUPPORT_ERROR, message='Not support this operate') conn = None cursor = None try: insert_result = self.__execute(sql=sql, params=params, execute_mode=execute_mode, cursor_mode=cursor_mode) conn = insert_result['conn'] cursor = insert_result['cursor'] rowcount = cursor.rowcount if execute_mode == ExecuteMode.ONE_MODE: result = cursor.lastrowid else: result = rowcount self.__commit_connection() return result except DBError as e: raise e except Exception as e: reraise(DBError(e, sql=sql, params=params), sys.exc_info()[2]) finally: if cursor: cursor.close() if conn: self.__close_connection()
def select(self, sql, params=None, cursor_mode=CursorMode.CURSOR_MODE): if sql.upper().startswith('DROP') | sql.upper().startswith( 'CREATE') | sql.upper().startswith('INSERT') | sql.upper( ).startswith('UPDATE') | sql.upper().startswith('DELETE'): raise DBError(key=DBErrorType.OPERATE_NOT_SUPPORT_ERROR, message='Not support this operate') conn = None cursor = None try: select_result = self.__execute(sql=sql, params=params, cursor_mode=cursor_mode) conn = select_result['conn'] cursor = select_result['cursor'] result = [] column_values = cursor.fetchall() if column_values is not None and len(column_values) > 0: column_names = [i[0] for i in cursor.description] for i, row in enumerate(column_values): tmp = {} for j, value in enumerate(row): tmp[column_names[j]] = value result.append(tmp) return result except DBError as e: raise e except Exception as e: reraise(DBError(e, sql=sql, params=params), sys.exc_info()[2]) finally: if cursor: cursor.close() if conn: self.__close_connection()
def __get_connection(self): ''' 获取一个连接 ''' if self.__has_connection(): conn = self.__local_conn.conn else: conn = self.__pool.get_connection() self.__local_conn.conn = conn if not conn.is_connected(): raise DBError(key=DBErrorType.NOT_CONNECT_ERROR, message='Connection is not connect.') if self.__has_transaction(): conn.autocommit = False else: conn.autocommit = True logger.debug('Connection autocommit: {}'.format(conn.autocommit)) return conn