Bug #74679 Django backend: AttributeError: 'NoneType' object has no attribute 'last_execute
Submitted: 4 Nov 2014 8:55 Modified: 3 Dec 2014 15:31
Reporter: Jan Vorcak Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / Python Severity:S2 (Serious)
Version:2.0.2 OS:Linux
Assigned to: Peeyush Gupta CPU Architecture:Any
Tags: Django, python

[4 Nov 2014 8:55] Jan Vorcak
Description:
Using Django==1.7.1, python==3.3.2 and mysql-connector-python==2.0.2

When using Django with mysql.connector.django engine, I can not connect to connection_created signal.

How to repeat:
1) Use mysql-connector-python

// settings.py
DATABASES = {
 'ENGINE': 'mysql.connector.django',
 ...
}

2) Connect to the connection_created signal
// connect your signal somewhere

from django.db.backends.signals import connection_created

def connection_setup(**kwargs):
    conn = kwargs['connection']
    with conn.cursor() as cursor:
        # execute some query once django connects to the db
        cursor.execute("SET character_set_results = 'latin1'")

connection_created.connect(connection_setup)

3) run the app

Suggested fix:
Performing system checks...

SET character_set_results = 'latin1'
SET character_set_results = 'latin1'
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x7f5bb8e19680>
Traceback (most recent call last):
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/mysql/connector/django/base.py", line 530, in __init__
    self.ensure_connection()
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/backends/__init__.py", line 133, in ensure_connection
    self.connect()
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/backends/__init__.py", line 125, in connect
    connection_created.send(sender=self.__class__, connection=self)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/dispatch/dispatcher.py", line 198, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/home/janvor/Backend/backend/opoint/urls.py", line 30, in connection_setup
    cursor.execute("select version()")
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/backends/utils.py", line 85, in execute
    sql = self.db.ops.last_executed_query(self.cursor, sql, params)
AttributeError: 'NoneType' object has no attribute 'last_executed_query'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/utils/autoreload.py", line 222, in wrapper
    fn(*args, **kwargs)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/core/management/commands/runserver.py", line 105, in inner_run
    self.validate(display_num_errors=True)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/core/management/base.py", line 362, in validate
    return self.check(app_configs=app_configs, display_num_errors=display_num_errors)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/core/management/base.py", line 371, in check
    all_issues = checks.run_checks(app_configs=app_configs, tags=tags)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/core/checks/registry.py", line 59, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/core/checks/model_checks.py", line 28, in check_all_models
    errors.extend(model.check(**kwargs))
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/models/base.py", line 1048, in check
    errors.extend(cls._check_fields(**kwargs))
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/models/base.py", line 1124, in _check_fields
    errors.extend(field.check(**kwargs))
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/models/fields/__init__.py", line 864, in check
    errors = super(AutoField, self).check(**kwargs)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/models/fields/__init__.py", line 192, in check
    errors.extend(self._check_backend_specific_checks(**kwargs))
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/models/fields/__init__.py", line 290, in _check_backend_specific_checks
    return connection.validation.check_field(self, **kwargs)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/__init__.py", line 40, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/utils.py", line 243, in __getitem__
    conn = backend.DatabaseWrapper(db, alias)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/mysql/connector/django/base.py", line 532, in __init__
    self._connect()
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/mysql/connector/django/base.py", line 613, in _connect
    connection_created.send(sender=self.__class__, connection=self)
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/dispatch/dispatcher.py", line 198, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/home/janvor/Backend/backend/opoint/urls.py", line 30, in connection_setup
    cursor.execute("select version()")
  File "/home/janvor/Backend/backend-env/lib/python3.3/site-packages/django/db/backends/utils.py", line 85, in execute
    sql = self.db.ops.last_executed_query(self.cursor, sql, params)
AttributeError: 'NoneType' object has no attribute 'last_executed_query'
[5 Nov 2014 7:45] Peeyush Gupta
Verified.

The mentioned error is occurring with DEBUG=True.

Thanks for the bug report :)
[3 Dec 2014 15:31] Paul DuBois
Noted in 2.0.3 changelog.

Using the Django backend, it was not possible to connect to a
connection_created signal.