Compoot
Compoot

Reputation: 2377

Django - installing mysqlclient error: mysqlclient 1.3.13 or newer is required; you have 0.9.3

I've trawled the forums but cannot find an answer or even any documentation on this. Trying to re-create a site like www.testandtrack.io

On running the command:

python manage.py inspectdb

I get the error:

mysqlclient 1.3.13 or newer is required; you have 0.9.3

I have tried all the suggested fixes including: -upgrading pip -installing a different wheel (32 bit instead of 64), namely mysqlclient-1.4.2-cp37-cp37m-win32.whl with the command pip install mysqlclient-1.4.2-cp37-cp37m-win32.whl (this works fine without an error but doesn't do the job required!)

My objective is to simply connect a legacy mysql database (running inside of XAMPP and myphpadmin) to Django. I've followed the documentation which misses out the need to install mysqlclient, and have got stuck at this point.

Upvotes: 45

Views: 84454

Answers (18)

Ross Maxx
Ross Maxx

Reputation: 11

None of the answers in here worked for me, but something else did. I uninstalled pymysql via apt and did sudo apt install python3-mysqldb and then reinstalled pymysql via apt. everything started working after that.

i couldn't use pip to install anything as ubuntu (and by extension mint) had a new policy preventing pip installs.

Upvotes: 0

Jyotiranjan Sankhua
Jyotiranjan Sankhua

Reputation: 1

I have also faced this issue to resolve simply upgrade pymysql

pip install --upgrade pymysql

Upvotes: 0

HB FL3X
HB FL3X

Reputation: 1

In my case i just deleted all the pymysql code in either settings.py or init.py__. Left out mysqlclient installed. The problem was solved

Upvotes: 0

Ulises Ramírez
Ulises Ramírez

Reputation: 11

Maybe your Django project uses pymysql, instead of upgrading mysqlclient, just do

pip install pymysql -U

This works for me ! :D

Upvotes: 0

Shaonsani
Shaonsani

Reputation: 178

Go to your virtual environment directory like mine:

C:\Users\user\.virtualenvs\RPA-Orchestrator-Backend-GwIL98hN\Lib\site-packages\django\db\backends\mysql\base.py

Here you might edit one line to avoid your error in the base.py file,

version = Database.version_info
if version < (0, 9, 3):
   raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

Then your problem might solve.

Upvotes: -1

Sami
Sami

Reputation: 105

It worked fine with me just open settings.py and include

 import pymysql
 pymysql.version_info = (1, 4, 6, 'final', 0)
 pymysql.install_as_MySQLdb()

Upvotes: 6

AlexanderAdade
AlexanderAdade

Reputation: 61

If you are working with Django on ubuntu, i will suggest you do the following to resolve the issue than editing django specific configuration files

run the following commands in the terminal

  1. sudo apt-get install python3-dev default-libmysqlclient-dev build-essential

  2. pip install mysqlclient

Upvotes: 0

Diego Magalh&#227;es
Diego Magalh&#227;es

Reputation: 1762

This is how I fixed it.

Go to your django/db/backends/mysql installation dir. Check your path in the error message.

I'm using pipenv so my path is:

/home/username/.local/share/virtualenvs/project-env/lib/python3.7/site-packages/django/db/backends/mysql

If you use traditional env your path would be:

<env_directory_name>/Lib/site-packages/django/db/base.py

Open file base.py and search for:

version = Database.version_info

Put a pass inside if and comment line:

raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.version)

Like this.

if version < (1, 3, 13):
   pass
   '''
   raise ImproperlyConfigured(
       'mysqlclient 1.3.13 or newer is required; you have %s.'
       % Database.__version__
   )
   '''

Save, close this file and open operations.py.

Search for:

query = query.decode(errors='replace')

and change decode to encode

query = query.encode(errors='replace')

Now, try to run the server.

@edit

Until this answer, I found no other way to solve it. Today there are better ways to deal with this problem. This answer has a better approach.

Upvotes: 61

Luis Valverde
Luis Valverde

Reputation: 501

The following solution works in Django 3.2.3 to get rid of the 'mysqlclient 1.3.13 or newer is required; you have 0.9.3' problem:

1) pip uninstall mysqlclient # remove old version 2) pip install mysqlclient==1.3.13 3) comment or remove the old workaround in __init__.py of the main app.

# workaround django.core.exceptions.ImproperlyConfigured: #Error loading MySQLdb module. #Did you install mysqlclient? #import pymysql #pymysql.install_as_MySQLdb()

Upvotes: 2

girishsaraf03
girishsaraf03

Reputation: 109

I was finding a solution for this issue from a long time. I was using Ubuntu 18.04 and found this solution to be useful for python version 3.7.5

Step 1. Install libpython3.7-dev via sudo apt-get install

> sudo apt-get install libpython3.7-dev

Step 2: Install mysqlclient

> python3 -m pip install mysqlclient==1.4.6

Upvotes: 0

WisZhou
WisZhou

Reputation: 1379

I guess your project uses pymysql instead of mysqlclient.

You can try to search the following code snippet in your project. If you find it, please try the following methods to fix this problem:

import pymysql
pymysql.install_as_MySQLdb()

Insert a line of code between these two to make it look like this:

import pymysql
pymysql.version_info = (1, 3, 13, "final", 0)
pymysql.install_as_MySQLdb()

Then try to start your project.

  • Why do I know you are using pymysql? Because 0.9.3 is just the latest version of pymysql.
  • Why use pymysql instead of mysqlclient for the project? Because it is easier to install. pymysql does not depend on system libraries, while mysqlclient relies on a series of system libraries such as libmysqlclient-dev.
  • Why is mysqlclient difficult to install and Django still uses it by default? Because mysqlclient is faster and performs better. So if your project has high performance requirements, I suggest you remove the compatible code above and install mysqlclient in your project. If you need help during the installation of mysqlclient, please refer to this link: How to install Python MySQLdb module using pip?, and ensure libssl-dev has been installed before pip install mysqlclient.

Upvotes: 85

B1Z0N
B1Z0N

Reputation: 143

There are the same issue on github. Solution that perfectly fits for me is here.

I just quote an author:

I first pip uninstall pymysql (as it seems it doesn't work anymore)

Then I've used pip install mysqlclient

Last, I checked all my "pymysql" imports and deleted them.

Be sure to go and hit a like button on the comment in the link

Upvotes: -1

NM666
NM666

Reputation: 61

this problem occurs when you create Django project in pycharm by default settings. It's caused by the default version of django is 2.2.6, so just downgrade the django version to 2.1.7, and error in the terminal is gone.

pip install Django==2.1.7

that's all!

Upvotes: 6

Alex Shchegretsov
Alex Shchegretsov

Reputation: 31

If it's not critical for you, as a variant, just downgrade your django framework from 2.2.2(for example) to 2.1.

Upvotes: 0

fsalazar_sch
fsalazar_sch

Reputation: 455

Instead of edit internal configuration, try to upgrade the version of mysqlclient

pip3 install -U mysqlclient

Upvotes: 3

Ngoni Mugandani
Ngoni Mugandani

Reputation: 1

I had a similar issue, I was getting

"django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 1.3.12."

So I went to the C:\Users\username\Envs\env\Lib\site-packages\django\db\backends\mysql, opened base.py and changed that line...

if version < (1, 3, 13): 

to...

if version < (1, 3, 10):

which is a version lesser than mine and it worked.

Upvotes: 0

Aftabul Islam
Aftabul Islam

Reputation: 474

I have had the same issue as lower version of mysqlclient was installed due to pymysql.

OS: Linux Mint 19.1

Python: 3.6.8

Django: 2.2.2

  1. Uninstall mysqlclient: pip3 uninstall mysqlclient
  2. Uninstall pymysql: pip3 uninstall pymysql
  3. Install mysqlclient: pip3 install mysqlclient

Upvotes: 9

Dolidod Teethtard
Dolidod Teethtard

Reputation: 623

  1. Install wheel:

    pip install wheel

  2. Download file that you want from here: https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

  3. Move to your Downloads directory (I guess it'll be cd Downloads)

  4. Install downloaded file with: pip install <file name>

WARNING!! You CANT edit name of downloaded .whl file. It contains some information what is required to install.

Upvotes: 1

Related Questions