Django 中 MySQL 数据库配置错误及其解决方法

133 阅读2分钟

在 Django 中配置 MySQL 数据库时,用户可能会遇到一些问题。例如,如果用户在 settings.py 文件中使用了以下配置:

ENGINE: django.db.backends.mysql
NAME: /Applications/MAMP/db/ # this is because my 'mysql' is stored in that location on my mac machine 
USER: herodb #I just gave it this name to be used in django..

当运行命令 python manage.py syncdb 时,可能会出现以下错误:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 272, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 77, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/commands/syncdb.py", line 8, in <module>
    from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/sql.py", line 9, in <module>
    from django.db import models
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 40, in <module>
    backend = load_backend(connection.settings_dict['ENGINE'])
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 34, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/utils.py", line 93, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/utils.py", line 27, in load_backend
    return import_module('.base', backend_name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 17, in <module>
    raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named MySQLdb

2、解决方案

1)更正数据库配置:

确保在 settings.py 文件中,数据库配置使用以下格式:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'yourdbname',
        'USER': 'yourdbuser',
        'PASSWORD': 'yourdbpassword',
    }
}

其中,yourdbname、yourdbuser 和 yourdbpassword 分别为数据库名称、用户名和密码。

2)安装 MySQL-python 库:

在系统终端中执行以下命令安装 MySQL-python 库:

sudo easy_install MySQL-python

sudo pip install MySQL-python

3)配置 MySQL 用户密码:

使用以下命令设置 MySQL 用户密码:

sudo mysql -u root -p

之后,在命令提示符中输入密码。然后,执行以下命令来创建新的数据库用户:

CREATE USER 'yourdbuser'@'localhost' IDENTIFIED BY 'yourdbpassword';

其中,yourdbuser 和 yourdbpassword 分别为数据库用户名和密码。

4)授予数据库用户权限:

使用以下命令授予数据库用户对新数据库的权限:

GRANT ALL PRIVILEGES ON yourdbname.* TO 'yourdbuser'@'localhost';

其中,yourdbname 为新数据库的名称。

5)刷新权限:

使用以下命令刷新权限:

FLUSH PRIVILEGES;

6)重新启动 MySQL 服务:

使用以下命令重新启动 MySQL 服务:

sudo service mysql restart

7)重新运行命令:

在完成上述步骤后,重新运行 python manage.py syncdb 命令。此时,数据库应该能够正常连接并同步。