加载MySQLdb模块时出错'你安装了mysqlclient还是MySQL-python?'

时间:2017-10-24 04:42:51

标签: python mysql django phpmyadmin

我使用Windows 10命令行使用python34进行django项目但是,我遇到了SQL的困难。

我已经使用pip install mysqlclient==1.3.5安装了mysqlclient并找到了该文件,以确保我没有妄想。然后我运行python manage.py migrate将表迁移到SQL数据库(我使用的是phpmyadmin)。但是当命令返回时...

 File "C:\Users\user\env\lib\site-packages\django\db\backends\mysql\base.py", line 30, in <module>
    'Did you install mysqlclient or MySQL-python?' % e
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'.
Did you install mysqlclient or MySQL-python?

我知道这些问题已经存在,但是没有一个解决方案似乎对尝试产生了任何影响。提前谢谢。

14 个答案:

答案 0 :(得分:95)

pip install pymysql

然后,编辑项目origin目录中的__init__.py文件(与settings.py相同)

添加:

import pymysql

pymysql.install_as_MySQLdb()

答案 1 :(得分:8)

使用以下命令解决您的问题,

pip install mysql-python
apt-get install python3-mysqldb libmysqlclient-dev python-dev

适用于Debian

答案 2 :(得分:6)

迁移到python 3后遇到同样的问题。显然,MySQL-python不兼容,因此根据官方django docs,在Mac上使用pip install mysqlclient安装了mysqlclient。请注意,文档中提到了一些特定于操作系统的问题。

引用docs

  

先决条件

     

您可能需要像这样安装Python和MySQL开发标头和库:

     

sudo apt-get install python-dev default-libmysqlclient-dev#Debian / Ubuntu

     

sudo yum install python-devel mysql-devel#Red Hat / CentOS

     

brew install mysql-connector-c#macOS(自制软件)(当前有错误。请参见下文)

     

在Windows上,您可以安装不带MySQLConnector / C或MSVC的二进制轮子。

     

关于Python 3的说明:如果您正在使用python3,则需要使用以下命令安装python3-dev:

     

sudo apt-get install python3-dev#debian / Ubuntu

     

sudo yum install python3-devel#Red Hat / CentOS

     

关于macOS上的MySQL Connector / C错误的说明

     

另请参阅:https://bugs.mysql.com/bug.php?id=86971

     

MySQL Connector / C的版本可能具有错误的默认配置选项,当安装mysqlclient-python时会导致编译错误。 (自2017年11月起,对于自制软件的mysql-connector-c和官方软件包来说确实如此)

     

修改mysql_config可以解决以下问题。

     

更改

# on macOS, on or about line 112:
# Create options
libs="-L$pkglibdir"
libs="$libs -l "
  

# Create options
libs="-L$pkglibdir"
libs="$libs -lmysqlclient -lssl -lcrypto"
  

不正确的ssl配置也可能会导致问题;有关macOS的详细信息,请参见brew info openssl

     

从PyPI安装

     

pip install mysqlclient

     

注意:Windows的Wheels可能不会与源包一起发布。您应该在requirements.txt中固定版本,以避免尝试安装最新的源程序包。

     

从源安装

     
      
  1. 通过git clonezipfile下载源。
  2.   
  3. 自定义site.cfg
  4.   
  5. python setup.py install
  6.   

答案 3 :(得分:4)

此命令从上述@Aniket Sinha的回答中解决了问题:

pip install mysqlclient

答案 4 :(得分:3)

如果您已经安装了mysqlclient(即看到Requirement already satisfied)并且正在获取Error loading MySQLdb Module,则以下内容对我有用:

  1. pip uninstall mysqlclient
  2. export LDFLAGS="-L/usr/local/opt/openssl/lib"export CPPFLAGS="-I/usr/local/opt/openssl/include",如here所述
  3. pip install mysqlclient

这将重新安装mysqlclient,无论出于何种原因解决了我的问题。

答案 5 :(得分:1)

我在 Windows 中使用 python 3。 我也遇到过这个问题。我刚刚卸载了“mysqlclient”,然后再次安装了它。 它以某种方式起作用

答案 6 :(得分:0)

即使使用python 3兼容的mysqlclient库,我最近也遇到了这个问题,尽管设法以一种非正统的方式解决了我的问题。如果您使用的是MySQL 8,请尝试一下,看看是否有帮助! :)

我只是制作了libmysqlclient.21.dylib文件的一个副本,该文件位于/usr/local/mysql/lib中最新安装的MySQL 8.0.13中,并将该副本以相同的名称移动到{{ 1}}。

您将需要暂时在Mac上禁用安全完整性保护,但要这样做,因为您将没有权限或无法更改/usr/lib中的任何权限,而无需禁用它。您可以通过启动进入恢复系统,在顶部的菜单上单击实用程序,然后打开终端并在终端中输入/usr/lib来执行此操作。只记得在完成此操作后重新打开安全完整性保护!与上述过程的唯一区别是您改为运行csrutil disable

您可以找到有关如何禁用和启用macOS的安全完整性保护here的更多信息。

答案 7 :(得分:0)

点子

const express = require('express');
const router = express.Router();

module.exports = function(io) {

    //we define the variables
    var sendResponse = function () {};

    io.sockets.on("connection",function(socket){
        // Everytime a client logs in, display a connected message
        console.log("Server-Client Connected!");

        socket.on('connected', function(data) {
            //listen to event at anytime (not only when endpoint is called)
            //execute some code here
        });

        socket.on('taskResponse', data => {
            //calling a function which is inside the router so we can send a res back
            sendResponse(data);
        })     
    });

    router.post('/', async (req, res) => {

        //pickedUser is one of the connected client
        var pickedUser = "JZLpeA4pBECwbc5IAAAA";
        io.to(pickedUser).emit('taskRequest', req.body);

        sendResponse = function (data) {
            return res.status(200).json({"text": "Success", "response": data.data});
        }

    });

    return router;

};

对于pip3,您应该使用

pip install pymysql

然后,在项目原始目录(与settings.py相同)中编辑init.py文件。添加:

python3 -m pip install PyMySQL

答案 8 :(得分:0)

使用mysqlclient安装anacondasimple and straight forward

conda install -c bioconda mysqlclient

,然后使用pip安装pymysql

pip install pymqsql

学习愉快。

答案 9 :(得分:0)

对于MAC os用户:

我已经多次面对这个问题。这里的关键是在通过pip命令安装mysqlclient之前设置这些环境变量。就我而言,它们如下所示:

export LDFLAGS =“-L/usr/local/opt/protobuf@3.7/lib”

export CPPFLAGS =“-I/usr/local/opt/protobuf@3.7/include”

答案 10 :(得分:0)

我只需要更新项目的依赖项,然后重新启动服务器即可。

答案 11 :(得分:0)

解决问题运行:pip install mysql-connector-python==8.0.23

在 mac 上使用 mysql.connector 版本 8.0.24 遇到了这个问题(如果代码库相同,那么问题也应该发生在 Windows 中)。第 51 行的 This file 导入“from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper”。 imported file 具有以下代码 14-20(您收到的确切代码和错误是代码的一部分

try:
    import MySQLdb as Database
except ImportError as err:
    raise ImproperlyConfigured(
        'Error loading MySQLdb module.\n'
        'Did you install mysqlclient?'
    ) from err

这里形成了错误。不知道为什么这个导入在不同版本的 mysql 连接器中不断返回,但 8.0.23 没有导入,所以我恢复到那个版本并且错误消失了......这是你希望继续使用 mysql.connector 的情况。Python。不确定逻辑以及为什么此错误在过去 5 年中一直存在...

答案 12 :(得分:-1)

在项目原始目录中编辑init.py文件

import pymysql

pymysql.install_as_MySQLdb()

答案 13 :(得分:-3)

尝试在xampp上启动apache和mysql。它对我有用。