Getting Exception when setting django with mysql-server
Question: First of all I installed django on my Ubuntu machine

    
    
    sudo apt-get install python-django
    

After that i created my first project using following command and a directory
named 'mysite' was created.

    
    
    django-admin.py startproject mysite
    

Here, running the following command starts a server and i checked in the
browser, minimal server that comes with django was perfectly.

    
    
    python manage.py runserver
    

Then, I installed mysql-server running this command

    
    
    sudo apt-get install mysql-server
    

After this i create database in mysql named 'django_first' .  
And used the following command to install python module mysqldb successfully.

    
    
    sudo apt-get install python-mysqldb
    

As of now no issue occurred. But as soon as I run this command in the
directory after setting all the necessary fields in settings.py file

    
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'django_first',
            'USER': 'root',
            'PASSWORD': 'password',
            'HOST': '',
            'PORT': '',
    }
    

Now run this command python manage.py runserver

I get the following errors :-

    
    
    Traceback (most recent call last):
      File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line  399, in execute_from_command_line
        utility.execute()
      File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
        self.execute(*args, **options.__dict__)
      File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 280, in execute
        translation.activate('en-us')
      File "/usr/local/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 130, in activate
        return _trans.activate(language)
      File "/usr/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 188, in activate
        _active.value = translation(language)
      File "/usr/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py",     line 177, in translation
        default_translation = _fetch(settings.LANGUAGE_CODE)    
      File "/usr/local/lib/python2.7/site-packages/django/utils/translation/trans_real.py", line 159, in _fetch
        app = import_module(appname)
      File "/usr/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in     import_module
        __import__(name)
      File "/usr/local/lib/python2.7/site-packages/django/contrib/admin/__init__.py", line 6, in <module>
        from django.contrib.admin.sites import AdminSite, site
      File "/usr/local/lib/python2.7/site-packages/django/contrib/admin/sites.py", line 4,     in <module>
        from django.contrib.admin.forms import AdminAuthenticationForm
      File "/usr/local/lib/python2.7/site-packages/django/contrib/admin/forms.py", line 6, in <module>
        from django.contrib.auth.forms import AuthenticationForm
      File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/forms.py", line 17, in <module>
        from django.contrib.auth.models import User
      File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/models.py", line 48, in <module>
        class Permission(models.Model):
      File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py", line 96, in     __new__
        new_class.add_to_class('_meta', Options(meta, **kwargs))
      File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py", line 264, in     add_to_class
        value.contribute_to_class(cls, name)
      File "/usr/local/lib/python2.7/site-packages/django/db/models/options.py", line 124, in contribute_to_class
        self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
      File "/usr/local/lib/python2.7/site-packages/django/db/__init__.py", line 34, in     __getattr__
        return getattr(connections[DEFAULT_DB_ALIAS], item)
      File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line 198, in     __getitem__
        backend = load_backend(db['ENGINE'])  
      File "/usr/local/lib/python2.7/site-packages/django/db/utils.py", line 113, in     load_backend
        return import_module('%s.base' % backend_name)
      File "/usr/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in     import_module
        __import__(name)
      File "/usr/local/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line     17, in <module>
        raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
    django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module     named MySQLdb`
    

Looks to be some issue with mysqldb module not installed, but that's not
exactly it is as I rerun the installation command for this.

Any ideas about this ?


Answer: `MySQLdb` is just the module that connects to MySQL, but it's part of a larger
package called `MySQL-Python`. Just do:

    
    
    pip install MySQL-python
    

And it should take care of everything (you probably need to `sudo` that
command). In fact, I'd probably suggest you do:

    
    
    pip install MySQL-python --upgrade
    

To assure it installs the latest version. If that doesn't change anything,
follow [these instructions](http://edwards.sdsu.edu/labsite/index.php/lab-
blog/404-installing-mysqldb-module-for-python-2-7-for-ubuntu-12-04) to make
sure you get the latest version and all required dependencies

p.s. in general, always prefer `pip` over `apt-get` for installing python
packages, since it gets updated a lot more frequently. For example, the
`django` version you have installed using the `apt-get` method might very well
be a very old release. To fix that, delete the django folder in your site-
packages and do:

    
    
    pip install django==1.6.2 #this is the latest version
    

