当我的机器中已经有 MySQL 时,是不是还需要在 Django 虚拟环境中安装 MySQL?

Posted

技术标签:

【中文标题】当我的机器中已经有 MySQL 时,是不是还需要在 Django 虚拟环境中安装 MySQL?【英文标题】:Do I still need to install MySQL in Django virtual env while I already have MySQL in my machine?当我的机器中已经有 MySQL 时,是否还需要在 Django 虚拟环境中安装 MySQL? 【发布时间】:2019-10-13 13:40:15 【问题描述】:

我已经在我的 windows 10 机器上安装了 mysql 5.1,我可以通过以下方式从 python 连接 mysql:

import pymysql
conn=pymysql.connect(host='localhost',user='root',password='MYSQLTB',db='shfuture')

然后我下载django框架并尝试使用它来连接mysql,我所做的是:

创建一个my.cnf文件内容是:

[client]
database = shfuture
host = localhost
user = root
password = MYSQLTB
default-character-set = utf8

将 settings.py 更改为:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': 
            'read_default_file': os.path.join(BASE_DIR, 'my.cnf'),
        ,
    

然后运行:

python manage.py runserver

但出现错误:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install the MySQL client?

我还需要在 Django 虚拟环境中安装额外的 MySQL 吗?如果我可以改用现有的 MySQL

【问题讨论】:

django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb的可能重复 您需要安装客户端库才能访问 MySQL 服务器,而不是 MySQL 服务器本身。您的问题无法区分它们。 【参考方案1】:

是的,当然。你需要安装'mysqlclient'包或'mysql-connector-python'包,带有pip。

【讨论】:

【参考方案2】:

是的,您必须再次在虚拟环境中重新安装 mysql for django。对于 Windows,您可以执行以下操作:-

pip install django mysqlclient

【讨论】:

【参考方案3】:

我猜你没有在虚拟环境中安装mysqlclient python 库。

由于您使用的是Windows,您需要从here下载并安装mysqlclient python 库

【讨论】:

【参考方案4】:

PyMySQLMySQLdb 都是数据库连接器。我假设您的 django 框架默认搜索 MySQLdb 并抛出异常,因为它找不到。

您可以安装 MySQLdb 或按照@ruddra 的回答。我建议您在开发机器的情况下使用@ruddra 的答案。因为在安装和使 MySQLdb 正常工作时,您可能会遇到很多问题(50/50 的机会)。

阅读What is PyMySQL and how does it differ from MySQLdb? Can it affect Django deployment?以了解更多信息。

【讨论】:

【参考方案5】:

基本上你需要将以下代码放在manage.pywsgi.py 之上,如下所示:

#!/usr/bin/env python
import os
import sys
import pymysql
pymysql.install_as_MySQLdb()
# rest of the code

您还需要确保在虚拟环境中安装了pymysql

仅供参考:django>=2.2 中使用 pymysql 可能无法正常工作。你会找到一些可能有效的解决方案,就像this ticket 中提到的那样。另外,django 官方不支持 pymysql 作为 mysql 连接器(票证#12500#22391)。

【讨论】:

以上是关于当我的机器中已经有 MySQL 时,是不是还需要在 Django 虚拟环境中安装 MySQL?的主要内容,如果未能解决你的问题,请参考以下文章

当我的角度应用程序中已经存在身份验证时,是不是需要在 Web API 中进行身份验证

Mysql 无法连接,因为目标机器主动拒绝

如何将机器添加到 SQL 数据库中已经分片的数据?

当我在查询中使用“GROUP_CONCAT”和“HAVING”时如何计算 MySQL 结果?

通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL

加密c#和mysql之间的数据流量