Django manage.py syncdb throwing Нет модуля с именем MySQLdb - PullRequest
10 голосов
/ 17 ноября 2009

Я новичок в изучении Python / Django ...

Я использую следующий учебник, расположенный здесь .

Создана база данных mysite в MySQL 5 на Snow Leopard.

Отредактировал файл 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

Что я, возможно, делаю не так?

Счастливого программирования ...

Ответы [ 5 ]

14 голосов
/ 17 ноября 2009
sudo easy_install mysql-python

установит модуль MySQLdb, чтобы вы могли работать с MySQL из Python, или, если вы хотите работать с 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

Поместит вас в virtualenv с текущей установкой django (вы можете указать, какая версия, например, django == 1.1.1) и установленным модулем MySQLdb. Использование virtualenv позволит вам иметь отдельные среды для разных проектов, чтобы вы могли устанавливать разные модули и даже использовать разные версии этих модулей (или Python) для разных проектов. Чтобы оставить вас virtualenv, просто наберите команду

deactivate

или, чтобы переключиться на окружение типа foo

workon foo

Вам также следует, если вы собираетесь использовать virtualenv, добавить эти три строки в ваш ~ / .bash_profile (в OS X, ~ / .bashrc обычно в Linux):

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
12 голосов
/ 17 ноября 2009

Проблема в том, что вам не хватает модуля Python, который взаимодействует с MySQL.

См. Документы Django для , чтобы ваша база данных работала , что дополнительно указывает на MySQL notes .

Однако, если вы просто просматриваете учебник, гораздо проще использовать SQLite, встроенный в Python. Драйверы, сервер и т. Д. Не нужны.

2 голосов
/ 31 октября 2012

Стоит отметить (даже в более позднюю дату), что ошибка "ImproperlyConfigured" ниже

Файл "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages /django/db/backends/mysql/base.py", строка 13, в
поднять 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 (Соединение, self). init (* args, ** kwargs2)

_mysql_exceptions.OperationalError: (2003, «Не удается подключиться к серверу MySQL на« 127.0.0.1 »(61)»)

После проверки mysqld, обнаружения его неработающего и запуска - моя ошибка конфигурации была чудесным образом исправлена!

1 голос
/ 15 апреля 2014

Попробуйте, если вы используете

Linux: - sudo apt-get install python-mysqldb

Windows: - pip install python-mysqldb или easy_install python-mysqldb

Надеюсь, это сработает

0 голосов
/ 28 июня 2015

Убедитесь, что вы создали свою базу данных, и при работающем сервере MySQL попытайтесь подключиться к базе данных, чтобы проверить правильность имени базы данных, имени пользователя и пароля. затем запустите:

1) pip install mysqlclient

2) python manage.py migrate

...