diff options
| author | postal2600 | 2010-11-25 01:44:46 -0800 |
|---|---|---|
| committer | Rob Hudson | 2011-01-09 10:18:30 -0800 |
| commit | a2edb76e8dc900ab5f147e062ceee5ac3ac35a18 (patch) | |
| tree | 3efd1cd2d6fc3e0209cbc174b772f5082d7bbe8d /debug_toolbar/panels | |
| parent | 2f76c21ed607a83c458aa5596be7d114dbd19702 (diff) | |
| download | django-debug-toolbar-a2edb76e8dc900ab5f147e062ceee5ac3ac35a18.tar.bz2 | |
Added support for executemany. Fixes issue #120
Signed-off-by: Rob Hudson <rob@cogit8.org>
Diffstat (limited to 'debug_toolbar/panels')
| -rw-r--r-- | debug_toolbar/panels/sql.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/debug_toolbar/panels/sql.py b/debug_toolbar/panels/sql.py index 299da66..a3eff49 100644 --- a/debug_toolbar/panels/sql.py +++ b/debug_toolbar/panels/sql.py @@ -139,6 +139,49 @@ class DatabaseStatTracker(util.CursorDebugWrapper): 'is_select': sql.lower().strip().startswith('select'), 'template_info': template_info, }) + + def executemany(self, sql, params=()): + start = datetime.now() + try: + return self.cursor.executemany(sql, params) + finally: + stop = datetime.now() + duration = ms_from_timedelta(stop - start) + stacktrace = tidy_stacktrace(traceback.extract_stack()) + _params = '' + try: + _params = simplejson.dumps([force_unicode(x, strings_only=True) for x in params]) + except TypeError: + pass # object not JSON serializable + + template_info = None + cur_frame = sys._getframe().f_back + try: + while cur_frame is not None: + if cur_frame.f_code.co_name == 'render': + node = cur_frame.f_locals['self'] + if isinstance(node, Node): + template_info = get_template_info(node.source) + break + cur_frame = cur_frame.f_back + except: + pass + del cur_frame + + # We keep `sql` to maintain backwards compatibility + self.db.queries.append({ + 'sql': self.db.ops.last_executed_query(self.cursor, sql, params), + 'duration': duration, + 'raw_sql': sql, + 'params': _params, + 'hash': sha_constructor(settings.SECRET_KEY + sql + _params).hexdigest(), + 'stacktrace': stacktrace, + 'start_time': start, + 'stop_time': stop, + 'is_slow': (duration > SQL_WARNING_THRESHOLD), + 'is_select': sql.lower().strip().startswith('select'), + 'template_info': template_info, + }) util.CursorDebugWrapper = DatabaseStatTracker class SQLDebugPanel(DebugPanel): |
