def execute(self, data): request = self.context.get('request') session = create_session(request) query = data['query'] params = data.get('params', []) if 'timezone' in data: try: session.execute('SET TIME ZONE :tz', {'tz': data['timezone']}) except SQLAlchemyError: pass try: result = session.execute(text(query), params) rows = list(map(lambda x: x.itervalues(), result)) def map_column(x): if x == '?column?': return return x return {'data': rows, 'columns': map(map_column, result.keys())} except (SQLAlchemyError, TypeError) as e: raise SqlError(e) finally: session.close()
def before_dispatch(self, request): super(APIView, self).before_dispatch(request) try: request.session = create_session(request) except Exception as e: raise ValidationError(str(e))
def execute(self, data): request = self.context.get('request') session = create_session(request) query = data['query'] if data['v'] >= 2: params = data.get('params_obj', {}) else: params = data.get('params', []) if 'timezone' in data: try: session.execute('SET TIME ZONE :tz', {'tz': data['timezone']}) except SQLAlchemyError: session.rollback() pass try: result = session.execute(text(query), params) rows = list(map(lambda x: list(x.itervalues()), result)) def map_column(x): if x == '?column?': return return x def map_row_column(x): if isinstance(x, bytes): try: return x.decode('utf-8') except UnicodeDecodeError: return x.hex() else: return x def map_row(x): return list(map(map_row_column, x)) return { 'data': list(map(map_row, rows)), 'columns': list(map(map_column, result.keys())) } except SQLAlchemyError as e: session.rollback() raise SqlError(e) except TypeError as e: raise SqlError(e) except Exception as e: raise SqlError(e) finally: session.close()