Python3 + MySql: 加载MySQLdb模块时出错:没有名为'MySQLdb'的模块

22 投票
5 回答
67147 浏览
提问于 2025-04-29 14:33

我刚开始学习Python,想要设置一个Django项目来使用MySql。我看过相关的文档,也浏览了一些StackOverflow上的帖子,但还是搞不定。

当我在Django中尝试运行迁移命令时,出现了以下错误:

Error loading MySQLdb module: No module named 'MySQLdb'

我安装了推荐的 MySql Python连接器(2.0.1),选择了Ubuntu(因为我在使用Mint Linux)。安装过程没有问题,但我还是遇到了错误。我是不是不需要把这个库添加到项目里?看起来Python应该能自动识别并正常运行。那我该怎么办呢?谢谢。

补充一下:我用的是Python 3.4,很多常见的解决方案还是基于2.7的,所以不适用,而我尝试过的所有3.0的解决方案也都没成功。

暂无标签

5 个回答

0

我用的是 Python 3.9.13,运行命令 pip install mysqlclient 可以成功安装。

13

如果你能安装pymysql——我在Python 3.4上用得很好——那么在你的Django项目中的manage.py文件里添加以下几行代码:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass

这样做会让pymysql像MySQLdb那样工作,对我来说是有效的。

20

我用的是python3.5,运行 pip install mysqlclient 这个命令可以正常安装。

29

在Ubuntu Server 16.04上,之前的回答都没能解决我的问题,所以我执行了:

sudo apt-get install libmysqlclient-dev
sudo -H pip3 install mysqlclient

第一个命令给我提供了第二个命令所需要的mysql配置。

15

我需要看看你在settings.py文件中关于DATABASES的配置,但看起来它试图加载的是MySQLDB,而不是你安装的Mysql Python连接器。DATABASES的配置应该像这样:

DATABASES = {
    'default': {
        'NAME': 'mydatabase',
        'ENGINE': 'mysql.connector.django',
        'USER': 'myuser',
        'PASSWORD': 'secretpassword',
        'OPTIONS': {
          'autocommit': True,
        },
    }
}

注意ENGINE这一部分……它告诉Django使用mysql连接器,而不是MySQLDB……

更多信息可以在这里找到: http://bunwich.blogspot.com/2014/02/finally-mysql-connector-that-works-with.html http://dev.mysql.com/doc/connector-python/en/connector-python-django-backend.html

如果你打算使用South的话:

www.pythonanywhere.com/wiki/UsingMySQL

你可能还需要注意,Oracle的连接器是GPL协议的,使用这个代码可能会有许可证问题。详情请见:

groups.google.com/forum/#!topic/django-developers/8r_RVmUe5ys

Django 1.7的文档推荐使用mysqlclient驱动……

docs.djangoproject.com/en/1.7/ref/databases/ --查看关于Mysql DB API驱动的部分

可以在这里找到这个客户端:pypi.python.org/pypi/mysqlclient……

-Scott

撰写回答