﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
18886	MySQL backend and _last_executed	Viktor	nobody	"this is an extracted version of https://groups.google.com/forum/?fromgroups=#!topic/google-cloud-sql-discuss/55mTyqweXpo

>> from the django/db/backends/mysql/base.py
>> 
>> # With MySQLdb, cursor objects have an (undocumented) ""_last_executed""
>> # attribute where the exact query sent to the database is saved.
>> # See MySQLdb/cursors.py in the source distribution.

> Using a protected field in the mysql driver seems like the wrong thing for django to do.  Is there a substantial difference between the default implementation of last_executed_query() and the one returned by the mysql version?

> http://code.djangoproject.com/svn/django/trunk/django/db/backends/__init__.py

    def last_executed_query(self, cursor, sql, params):
        """"""
        Returns a string of the query last executed by the given cursor, with
        placeholders replaced with actual values.

        `sql` is the raw query containing placeholders, and `params` is the
        sequence of parameters. These are used by default, but this method
        exists for database backends to provide a better implementation
        according to their own quoting schemes.
        """"""
        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, errors='replace')
        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"	Cleanup/optimization	closed	Database layer (models, ORM)	1.4	Normal	invalid	_last_executed mysql last_executed_query		Unreviewed	0	0	0	0	0	0
