17

I have tried a lot to solve this issue but I did not solve it. I have searched a lot on google and stackoverflow, no option is working for me. Please help me. Thanks in advance. I am using django 1.10, python 3.4. I have tried :

  1. pip install mysqldb.
  2. pip install mysql.
  3. pip install mysql-python.
  4. pip install MySQL-python.
  5. easy_install mysql-python.
  6. easy_install MySQL-python.

Anything else left ?

      C:\Users\benq\Desktop\dimo-develop\Project>python manage.py runserver
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x0332D348>
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\django\db\backends\mysql\base.py", line 25, in <module>
    import MySQLdb as Database
ImportError: No module named 'MySQLdb'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "C:\Python34\lib\site-packages\django\core\management\commands\runserver.py", line 109, in inner_run
    autoreload.raise_last_exception()
  File "C:\Python34\lib\site-packages\django\utils\autoreload.py", line 249, in raise_last_exception
    six.reraise(*_exception)
  File "C:\Python34\lib\site-packages\django\utils\six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "C:\Python34\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "C:\Python34\lib\site-packages\django\__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Python34\lib\site-packages\django\apps\registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "C:\Python34\lib\site-packages\django\apps\config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Python34\lib\importlib\__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "C:\Python34\lib\site-packages\django\contrib\auth\models.py", line 4, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "C:\Python34\lib\site-packages\django\contrib\auth\base_user.py", line 49, in <module>
    class AbstractBaseUser(models.Model):
  File "C:\Python34\lib\site-packages\django\db\models\base.py", line 108, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "C:\Python34\lib\site-packages\django\db\models\base.py", line 299, in add_to_class
    value.contribute_to_class(cls, name)
  File "C:\Python34\lib\site-packages\django\db\models\options.py", line 263, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "C:\Python34\lib\site-packages\django\db\__init__.py", line 36, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "C:\Python34\lib\site-packages\django\db\utils.py", line 212, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "C:\Python34\lib\site-packages\django\db\utils.py", line 116, in load_backend
    return import_module('%s.base' % backend_name)
  File "C:\Python34\lib\importlib\__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "C:\Python34\lib\site-packages\django\db\backends\mysql\base.py", line 28, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'
Nathaniel Ford
  • 20,545
  • 20
  • 91
  • 102
Amandeep Dhiman
  • 582
  • 3
  • 8
  • 21

8 Answers8

45

MySQLdb is the interface to MySQL database. As mentioned by other posts, MySQLdb doesn't support Python 3.x. I used PyMySQL as the replacement. You need to install it first:

pip install PyMySQL

The next step is to replace 'MySQLdb' with 'pymysql' in all the codes, which is intimidating. Luckily, PyMySQL can be loaded as MySQLdb dyanamically. In order to achieve it in Django, you need to add the following lines to __init__.py file under the dir of the project's default app (If your have a project named 'myproject', add lines to myproject/myproject/init.py):

import pymysql
pymysql.install_as_MySQLdb()

This __init__.py would be executed when you run the Django project, and MySQLdb will be replaced. You problem is then solved.

Vamei
  • 796
  • 1
  • 6
  • 7
14

You can use mysqlclient instead of MySQLdb. MySqLdb is not compatible with Python 3.

pip install mysqlclient
Nathaniel Ford
  • 20,545
  • 20
  • 91
  • 102
ettanany
  • 19,038
  • 9
  • 47
  • 63
  • Command "C:\Python34\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\benq\\AppData\\Local\\Temp\\pip-build-g79sedbo\\mysqlclient\\setup.py';exec(compile(geta ttr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record C:\Users\benq\AppData\Local\Temp\pip-zmdp676g-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\benq\AppData\Local\Temp\pip-build-g79sedbo\mysqlclient\ – Amandeep Dhiman Sep 19 '16 at 14:24
  • 1
    Try to download mysqlclient-1.3.7-cp27-none-win_amd64.whl from https://pypi.python.org/pypi/mysqlclient and install it with pip install mysqlclient-1.3.7-cp27-none-win_amd64.whl – ettanany Sep 19 '16 at 14:32
  • 1
    @ettanany OP is clearly using Python 3. Downloading the wheel from PyPI won't help. Better off downloading from [here](http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient). – MattDMo Sep 19 '16 at 14:48
12

MySQLdb is only for Python 2.x. You can't install in Python 3.x versions. Now from your question i can see that you are working with Django. In this case you have three alternatives, from Django mysql notes:

  • mysqldb
  • mysqlclient
  • mysql-connect-python

This gives to you two alternatives, mysqlclient and mysql-connect-python, The first one requires compilation from extensions for the plugin and, in Windows, this implies VStudio Libraries and a know-how for compile native extensions.

mysql-connect-python is not compiled (and i don't recommend this for production, maybe only for dev) so you are going to need to install this.

You can try:

pip3 install mysql-connect-python

or

pip3 install http://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-python-2.0.4.zip

if the first one fails.

Yonsy Solis
  • 944
  • 9
  • 14
4

MySQLdb is not compatible with Python 3. Use mysql-client or mysql-connect.

Daniel Roseman
  • 588,541
  • 66
  • 880
  • 895
2

You can also try installing mysqlclient-python directly from source:

  1. Download source by git clone or zipfile (URL - https://github.com/PyMySQL/mysqlclient-python.git).

  2. Customize site.cfg (you can give the path for mysql_config)

  3. python setup.py install

lazy.coder
  • 411
  • 3
  • 14
1

This one resolved my issue in Python 3.x

pip3 install PyMySQL

Instead of : SQLALCHEMY_DATABASE_URI = "'mysql://.....'"

Use : SQLALCHEMY_DATABASE_URI = "'mysql+pymysql://.....'"

0

use this package for python 2.7 on windows http://www.codegood.com/archives/129

ChAnDu353
  • 541
  • 7
  • 11
0

MySQLdb is not available for Python 3.x

I have CentOS server

This worked for me

python3 -m pip install --user https://github.com/davispuh/MySQL-for-Python-3/archive/1.0.tar.gz

Python 3.5.0 (default, Dec 12 2017, 17:00:35) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> import MySQLdb
Jadhav Gaurav
  • 510
  • 5
  • 10