def POST(self, type): i = web.input() statement = i['sql'] params = i['params'] # Validate hash hash = hashlib.sha1( web.config.SECRET_KEY + statement + params).hexdigest() if hash != i['hash']: raise web.notacceptable() # Make sure it is a select statement if not statement.lower().strip().startswith('select'): raise web.notacceptable() params = json.loads(params) engine = web.config.engine if type == 'explain': if engine.driver == 'pysqlite': statement = 'EXPLAIN QUERY PLAN %s' % statement else: statement = 'EXPLAIN %s' % statement result = engine.execute(statement, params) debugtoolbar = web.config.debug_toolbar return debugtoolbar.render('panels/sqla_result.html', { 'result': result.fetchall(), 'headers': result.keys(), 'sql': format_sql(statement, params), 'duration': float(i['duration']), 'type': type, })
def content(self): data = [] for query in web.config.debug_toolbar_queries: statement, parameters, duration, context = query is_select = statement.strip().lower().startswith('select') _params = '' try: _params = json.dumps(parameters) except TypeError: pass # object not JSON serializable hash = hashlib.sha1( web.config.SECRET_KEY + statement + _params).hexdigest() data.append({ 'duration': duration, 'sql': format_sql(statement, parameters), 'raw_sql': statement, 'hash': hash, 'params': _params, 'is_select': is_select, }) web.config.debug_toolbar_queries = [] return self.render('panels/sqlalchemy.html', {'queries': data})