4

我在 Win7 上使用 Django 1.4.1 和 Active Python 2.7。我已经使用pypm install mysql-python.

数据库引擎是django.db.backends.mysql.

import MySQLdb在交互式外壳中工作。

.\manage.py syncdb创建表没有问题。

但是,当我在浏览器中打开该站点时,我得到Error loading MySQLdb module: No module named MySQLdb

Environment:


Request Method: GET
Request URL: http://whatever/

Django Version: 1.4.1
Python Version: 2.7.2
Installed Applications:
('django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  89.                     response = middleware_method(request)
File "C:\Python27\lib\site-packages\django\contrib\sessions\middleware.py" in process_request
  10.         engine = import_module(settings.SESSION_ENGINE)
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module
  35.     __import__(name)
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\cached_db.py" in <module>
  6. from django.contrib.sessions.backends.db import SessionStore as DBStore
File "C:\Python27\lib\site-packages\django\contrib\sessions\backends\db.py" in <module>
  3. from django.db import IntegrityError, transaction, router
File "C:\Python27\lib\site-packages\django\db\__init__.py" in <module>
  40. backend = load_backend(connection.settings_dict['ENGINE'])
File "C:\Python27\lib\site-packages\django\db\__init__.py" in __getattr__
  34.         return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Python27\lib\site-packages\django\db\utils.py" in __getitem__
  92.         backend = load_backend(db['ENGINE'])
File "C:\Python27\lib\site-packages\django\db\utils.py" in load_backend
  24.         return import_module('.base', backend_name)
File "C:\Python27\lib\site-packages\django\utils\importlib.py" in import_module
  35.     __import__(name)
File "C:\Python27\lib\site-packages\django\db\backends\mysql\base.py" in <module>
  16.     raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)

Exception Type: ImproperlyConfigured at /
Exception Value: Error loading MySQLdb module: No module named MySQLdb

会话和消息应用程序的设置是:

SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
MESSAGE_STORAGE = "django.contrib.messages.storage.cookie.CookieStorage"

这怎么可能?

4

5 回答 5

3

问题是 MySQLdb 安装在我的主目录C:\Users\alexei\AppData\Roaming\Python\Python27\site-packages\中,而该目录不在 Python 的路径中。所以我卸载了它,pypm uninstall mysql-python然后使用全局pypm -g install mysql-python重新安装它(注意-g选项)。

另一种方法是将该路径添加到列表sys.path.append("...path...")wsgi.py

因此,如果其他人想知道,您可以像这样找出 MySQLdb(或任何其他模块)的安装位置:

import MySQLdb
print MySQLdb.__file__

确保该路径位于 Django 错误消息中提供的 Python 路径列表中。

于 2012-10-07T21:09:35.583 回答
2

如果您使用的是虚拟环境。你必须跑

cd virtualEnvPath
pip install MySQL-Python

不要忘记在您的虚拟环境中定位。/bin PATH,使用本地 pip。问候!

于 2014-07-24T08:59:57.450 回答
1

我通过以下方式配置了带有 mysql 的 djando:

1)DJANGO_SETTINGS_MODULE在 .bashrc 中设置环境变量并获取它

2)像这样(对于mysql)更改此env_var和local_settings.py(如果有)指向的settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'DB_NAME',
        'USER': 'DB_USER',
        'PASSWORD': 'DB_PASSWORD',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

3)安装mysql dev库和头文件,确保mysql在PATH

sudo apt-get install libmysqlclient-dev

4)为mysql安装python包

sudo pip install MySQL-python

5)测试django对你的mysql db的访问:

python manage.py dbshell

或者

django-admin dbshell

6) 使用你的 django 应用程序将 django 从 dir 同步到 mysql

python manage.py syncdb
于 2014-12-02T15:58:01.543 回答
1

我也遇到了这个问题,然后我在我的系统中安装了 python mysql

点安装 mysql-python

然后它的工作 看到这个--> 在我的系统中工作 >>
$ python manage.py syncdb;

创建表 ...
创建表 django_admin_log
创建表 auth_permission
创建表 auth_group_permissions
创建表 auth_group
......

于 2014-04-22T15:43:12.870 回答
1

最简单的方法是从二进制安装 MySQLdb: http ://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python

于 2014-05-28T04:31:46.240 回答