#10398: It may cause error in django.db.backends.last_executed_query. ----------------------------------------+----------------------------------- Reporter: bear330 | Owner: nobody Status: new | Milestone: Component: Uncategorized | Version: 1.0 Keywords: unicode pickle db backends | Stage: Unreviewed Has_patch: 0 | ----------------------------------------+----------------------------------- In CursorDebugWrapper.execute:
{{{ start = time() try: return self.cursor.execute(sql, params) finally: stop = time() sql = self.db.ops.last_executed_query(self.cursor, sql, params) self.db.queries.append({ 'sql': sql, 'time': "%.3f" % (stop - start), }) }}} Line: sql = self.db.ops.last_executed_query(self.cursor, sql, params) Might cause error if params can't be convert to unicode. In last_executed_query: {{{ to_unicode = lambda s: force_unicode(s, strings_only=True) if isinstance(params, (list, tuple)): u_params = tuple([to_unicode(val) for val in params]) else: u_params = dict([(to_unicode(k), to_unicode(v)) for k, v in params.items()]) }}} This will fail if params contains '''pickled object''' in some situation. It should be wrapped by try ... except block. => {{{ def last_executed_query(self, cursor, sql, params): from django.utils.encoding import smart_unicode, force_unicode # Convert params to contain Unicode values. to_unicode = lambda s: force_unicode(s, strings_only=True) try: if isinstance(params, (list, tuple)): u_params = tuple([to_unicode(val) for val in params]) else: u_params = dict([(to_unicode(k), to_unicode(v)) for k, v in params.items()]) return smart_unicode(sql) % u_params except: return smart_unicode(sql) }}} Thanks. -- Ticket URL: <http://code.djangoproject.com/ticket/10398> Django <http://code.djangoproject.com/> The Web framework for perfectionists with deadlines. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-updates?hl=en -~----------~----~----~----~------~----~------~--~---