【问题标题】:Python3 + MySql: Error loading MySQLdb module: No module named 'MySQLdb'Python3 + MySql:加载 MySQLdb 模块时出错:没有名为“MySQLdb”的模块
【发布时间】:2014-12-21 01:29:30
【问题描述】:

我是 Python 新手,正在尝试设置一个 Django 项目来使用 MySql。我已经阅读了文档以及有关该主题的其他一些 StackOverflow 帖子,但我仍然无法使用它。

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

Error loading MySQLdb module: No module named 'MySQLdb'

我已经安装了推荐的 MySql Python Connector (2.0.1) 选择 Ubuntu(因为我在 Mint Linux 上)。它安装正确。我仍然得到错误。我不需要将此库添加到项目或任何东西,对吗?看起来python应该只是意识到这一点并成功运行。我能做些什么?谢谢。

编辑:我忘了提及:我正在运行 Python 3.4 - 许多典型的解决方案仍在使用 2.7,因此它们不起作用,并且我尝试了所有 3.0 的解决方案都没有成功。

【问题讨论】:

标签: python mysql django mysql-python


【解决方案1】:

在 Ubuntu Server 16.04 上,现有的答案都不适合我,所以我跑了:

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

第一个命令让我得到第二个命令所需的 mysql 配置。

【讨论】:

  • 这对我来说仍然适用于全新安装的 Ubuntu 20.04。
【解决方案2】:

pip install mysqlclient 为我工作 python3.5

【讨论】:

  • 这里有一个重要的警告。在大多数 Linux 系统中,您将拥有 Python 3.x 和 Python 2.7。因此pip 将尝试在 2.7 上安装(这对 Python 3 没有帮助)。正如 Dan-Dev 的回答所提到的,您需要使用 pip3 将其放入 Python 3 中
【解决方案3】:

我需要在 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 Drivers部分

该客户端的 pypi.python.org/pypi/mysqlclient...

-斯科特

【讨论】:

  • django.core.exceptions.ImproperlyConfigured: 'mysql.connector.django' 不是可用的数据库后端。尝试使用 'django.db.backends.XXX',其中 XXX 是以下之一:'mysql'、'oracle'、'postgresql_psycopg2'、'sqlite3'
【解决方案4】:

如果你可以安装 pymysql——它适用于我的 Python 3.4——然后将这些行添加到 Django 中的 manage.py 文件中:

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

这将使 pymysql 像 MySQLdb 一样工作并为我工作。

【讨论】:

  • 这在本地解决了我的问题,但是当我将它部署到 Elastic Beanstalk 时,我又得到了旧的“没有名为 'MySQLdb' 的模块”。
  • 在最新版本的 Django 中应该不再需要。
  • 在 Python 3.7 和 django 2.2.1 中为我工作,但我在项目的 init.py 文件中添加了导入行。 (服务器操作系统 Red Hat 4.8)。
  • 这可行,但如果您收到版本错误:stackoverflow.com/a/59591269/1428624
【解决方案5】:

如果您像我一样使用 Linux 安装,并且在大多数情况下 Linux 仍然需要 Python 2.7。这意味着

pip install mysqlclient

将为 2.7 安装 MySQL 客户端,该客户端从 Python 3 中分离出来。要使其安装为 3.x,您需要使用

pip3 install mysqlclient

我不必安装任何软件包,但 mysql-common 已经安装(Raspbian 安装),因此您的里程可能会有所不同

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 2017-01-27
    • 2014-11-12
    • 2017-04-22
    • 2013-02-25
    • 2012-09-28
    • 1970-01-01
    • 2016-04-06
    • 2014-08-14
    相关资源
    最近更新 更多