配置不当:请求的设置数据库

时间:2018-06-20 14:01:59

标签: python django python-3.x

我已经看到了用Django配置MySQL数据库的10种不同方式,但没有一种有效。

我正在运行MySQL 8.0和 Django 2.0

我使用以下数据库设置更新了Project/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'name_of_db',
        'USER': 'root_user',
        'PASSWORD': 'not_telling_u_my_pass_:)',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

当我运行命令以测试连接性时:

python manage.py dbshell

我收到错误消息:

django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

没有进行其他设置,但是,我尝试遵循一些指南,这些指南说我必须声明:

set DJANGO_SETTINGS_MODULE=mysite.settings

我还发布了:

python manage.py shell

没有运气。我也正在运行Windows 7。我已经安装了所有从MySQL连接到MySQL的mysql依赖项。我知道这个问题已经被问过很多次了,但是应该存在一个带有明确说明的线程。其他许多线程都没有清晰简洁的说明,我正在使用MySQL的更高版本,因此希望这将有助于解决其他遇到相同问题的问题。

项目树:

Server
|
 +-- Server
|  |
|  +-- _init_.py
|  +-- settings.py
|  +-- urls.py
|  +-- wsgi.py
+-- manage.py

更新1(发布后10分钟): 我运行python manage.py migrate,这会将所有表安装到我的数据库模式中。但是,当我再次运行python manage.py dbshell命令时,上面仍然显示相同的错误,提示未配置设置。

更新2: 运行后:

python manage.py shell --settings=Server.settings

我得到:

python manage.py dbshell
CommandError: You appear not to have the 'mysql' program installed or on your path.

2 个答案:

答案 0 :(得分:0)

ImproperlyConfigured通常会掩盖其他错误。如您所述,您的数据库配置正确,这意味着该问题很可能是两个问题之一。

  1. 安装过程中导入的某些文件导致异常
  2. settings.py中有一个导入,而该导入又试图使用设置(即在加载时使用settings

首先,如果您的settings.py中有任何导入,请确保不要依次导入django.conf.settings(像import os这样的导入)。

接下来,检查项目中可能在设置过程中导入的文件(应用程序,URL,自定义中间件,模板上下文等),以了解在导入过程中可能出现的错误。确保可以自己导入所有文件(有些可能会抱怨,因为它们要求首先运行安装程序,您只需要格外仔细地检查它们,或者删除对设置的引用,以便可以自己进行测试)。

答案 1 :(得分:0)

我遇到了同样的问题,我终于解决了这个问题。原因是当您使用'localhost'参数时,MySql会有所不同。它将使用Unix套接字文件连接到本地服务器。

检查此文档: https://dev.mysql.com/doc/refman/5.7/en/connecting.html

因此,您应该在数据库中使用“ 127.0.0.1”而不是“ localhost”。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'name_of_db',
        'USER': 'root_user',
        'PASSWORD': 'not_telling_u_my_pass_:)',
        'HOST': '127.0.0.1', #This string will works!
        'PORT': '3306',
        #If you want to use 'localhost', you should provide the path 
        # of the UNIX socket. You should check /etc/my.cnf(the mysql 
        # config file) to get this parameter. 
        'OPTIONS': {'unix_socket': '/tmp/mysql.sock'}
    }
}

那将在MySql 5.7中起作用,我未在MySql 8.0中进行测试。另一个建议:在MySql中检查用户权限,可能是错误的。