Django manage.py syncdb throwing No module named MySQLdb

Posted

技术标签:

【中文标题】Django manage.py syncdb throwing No module named MySQLdb【英文标题】: 【发布时间】:2010-12-17 08:10:09 【问题描述】:

我是一个学习 Python/Django 的新手...

我正在使用位于here 的以下教程。

在 Snow Leopard 上运行的 mysql 5 中创建了一个 mysite 数据库。

将 settings.py 文件编辑为如下所示:

DATABASE_ENGINE = 'mysql'        
DATABASE_NAME = 'mysite'             
DATABASE_USER = 'root'             
DATABASE_PASSWORD = ''       
DATABASE_HOST = ''            
DATABASE_PORT = ''             

现在当我运行以下命令时:

python manage.py syncdb

我收到以下错误:

Traceback (most recent call last):
File "manage.py", line 11, in <module>
  execute_manager(settings)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
  python2.6/site-packages/django/core/management/__init__.py", line 362,
  in execute_manager
  utility.execute()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
  python2.6/site-packages/django/core/management/__init__.py", line 303,
  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/base.py", line 195, in
  run_from_argv
  self.execute(*args, **options.__dict__)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
  python2.6/site-packages/django/core/management/base.py", line 221, in
  execute
  self.validate()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
  python2.6/site-packages/django/core/management/base.py", line 249, in
  validate
  num_errors = get_validation_errors(s, app)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
  python2.6/site-packages/django/core/management/validation.py", line
  22, in get_validation_errors
  from django.db import models, connection
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
  python2.6/site-packages/django/db/__init__.py", line 41, in <module>
  backend = load_backend(settings.DATABASE_ENGINE)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages  
   /django/db/__init__.py", line 17, in load_backend
   return import_module('.base', 'django.db.backends.%s' %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 13, in <module>
   raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)
   django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb
   module: No module named MySQLdb

我可能做错了什么?

编程愉快...

【问题讨论】:

【参考方案1】:
sudo easy_install mysql-python

将安装 MySQLdb 模块以允许您从 Python 使用 MySQL,或者,如果您想使用 virtualenv(您应该这样做),

sudo easy_install virtualenv virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PIP_VIRTUALENV_BASE=$WORKON_HOME
source /usr/local/bin/virtualenvwrapper_bashrc
mkvirtualenv mysite
pip install mysql-python django

会将您放入当前安装 django 的 virtualenv 中(您可以指定哪个版本,例如 django==1.1.1)和安装的 MySQLdb 模块。使用 virtualenv 将允许您为不同的项目拥有不同的环境,这样您就可以安装不同的模块,甚至可以为不同的项目使用这些模块(或 Python)的不同版本。离开你 virtualenv 只需输入命令

deactivate

或者,切换到环境'foo'类型

workon foo

如果您要使用 virtualenv,您还应该将这三行添加到您的 ~/.bash_profile(在 OS X 上,通常在 Linux 上是 ~/.bashrc):

export WORKON_HOME=$HOME/.virtualenvs # where virtualenvs should be created
export PIP_VIRTUALENV_BASE=$WORKON_HOME # tells pip where to look for virtualenvs
source /usr/local/bin/virtualenvwrapper_bashrc # bash completion and wrapper functions for virtualenv

【讨论】:

【参考方案2】:

问题是您缺少与 MySQL 接口的 Python 模块。

查看get your database running 的Django 文档,它进一步指向MySQL notes。

但是,如果您只是学习本教程,则使用 Python 内置的 SQLite 后端要容易得多。无需驱动程序、服务器等。

【讨论】:

【参考方案3】:

值得指出(即使在这么晚的日期)下面的“配置不当”错误

文件“/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages /django/db/backends/mysql/base.py”,第 13 行,在 raise ImproperlyConfigured("加载 MySQLdb 模块时出错:%s" % e) django.core.exceptions.ImproperlyConfigured: 加载 MySQLdb 模块时出错: 没有名为 MySQLdb 的模块

在 mysql 没有运行的情况下可能是一个红鲱鱼 - 我自己只是在谷歌上搜索这个错误,想知道为什么错误配置“突然”出现了,在搜索和刺激时,我运行了其他一些 manage.py 命令并得到了这个类似但更有用的错误:

文件“~/.virtualenvs/mdid3/lib/python2.7/site-packages/MySQLdb/connections.py”,第 187 行,在 init

super(Connection, self).init(*args, **kwargs2)

_mysql_exceptions.OperationalError: (2003 年,“无法连接到 '127.0.0.1' (61) 上的 MySQL 服务器”)

检查mysqld后,发现它没有运行并启动它——我的配置错误奇迹般地修复了!

【讨论】:

【参考方案4】:

如果你正在使用,试试这个

linux:- sudo apt-get install python-mysqldb

windows:- pip install python-mysqldbeasy_install python-mysqldb

希望这应该可行

【讨论】:

【参考方案5】:

确保创建数据库并在 MySQL 服务器运行的情况下尝试连接到数据库以检查数据库名称、用户名和密码是否正确。然后运行:

1) pip install mysqlclient

2) python manage.py migrate

【讨论】:

以上是关于Django manage.py syncdb throwing No module named MySQLdb的主要内容,如果未能解决你的问题,请参考以下文章

执行python manage.py syncdb,报Unknown command: 'syncdb'

Django manage.py syncdb 不工作

[转]django 1.9之后python manage.py syncdb没有了

django 1.9之后python manage.py syncdb没有了

运行 Django 的 ./manage.py syncdb 时自动创建管理员用户

执行manage.py syncdb提示Unknown command: 'syncdb'