我已经看到了用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.
答案 0 :(得分:0)
ImproperlyConfigured
通常会掩盖其他错误。如您所述,您的数据库配置正确,这意味着该问题很可能是两个问题之一。
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中检查用户权限,可能是错误的。