#30380: Support mysql query objects as strings in addition to bytes, for PyMySQL support -----------------------------------------+------------------------ Reporter: Nathan Klug | Owner: nobody Type: Uncategorized | Status: new Component: Uncategorized | Version: 2.2 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -----------------------------------------+------------------------ Per https://github.com/PyMySQL/PyMySQL/issues/790, Django 2.2 changed the expected type of mysql queries; it's be great if we could support both mysqlclient and PyMySQL here. More details from that issue:
Django 2.1.x used to cast every query into "str" like below https://github.com/django/django/blob/stable/2.1.x/django/db/backends/mysql/operations.py#L134 Django 2.2.x they changed the code by using query.decode instead of force_text method. https://github.com/django/django/blob/stable/2.2.x/django/db/backends/mysql/operations.py#L140 Could you also help open a ticket on Django's issue tracking system ? It's relatively easy to fix from Django side. e.g. {{{ from django.utils.encoding import force_text def last_executed_query(self, cursor, sql, params): # With MySQLdb, cursor objects have an (undocumented) "_executed" # attribute where the exact query sent to the database is saved. # See MySQLdb/cursors.py in the source distribution. query = getattr(cursor, '_executed', None) if query is not None: if type(query) == bytes: query = query.decode(errors='replace') # mysqlclient elif type(query) == str: query = query.encode(errors='replace') # PyMySQL else: query = force_text(query, errors='replace') # fallback compatibility ? return query }}} -- Ticket URL: <https://code.djangoproject.com/ticket/30380> Django <https://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 unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/050.7877a625500e710415da95261d36b211%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.