示例#1
0
    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()
示例#2
0
    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
示例#3
0
    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]
示例#4
0
    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)
示例#5
0
    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()
示例#6
0
    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()
示例#7
0
    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