2011-05-25 9 views
6

Estoy siguiendo los pasos en el Django Book y llegué a la parte donde los autores explican que hot wo configuró un proyecto django para usar una base de datos. Elegí mysql.ImportError: Ningún módulo llamado mysql.base, en el proyecto django en el servidor Ubuntu 11.04

Mi configuración en settings.py son:

DATABASES = { 
    'default': { 
     'ENGINE': 'mysql',    # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'mydatabase',     # Or path to database file if using sqlite3. 
     'USER': 'myname',    # Not used with sqlite3. 
     'PASSWORD': 'mypassword',  # Not used with sqlite3. 
     'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

Al intentar iniciar el servidor, el siguiente mensaje se imprime:

Validating models... 

Traceback (most recent call last): 
    File "/home/me/workspace/mysite/src/mysite/manage.py", line 14, in <module> 
    execute_manager(settings) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 442, in execute_manager 
    utility.execute() 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 379, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 191, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 220, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 67, in handle 
    self.run(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 78, in run 
    self.inner_run(*args, **options) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 88, in inner_run 
    self.validate(display_num_errors=True) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 243, in validate 
    from django.core.management.validation import get_validation_errors 
    File "/usr/local/lib/python2.7/dist-packages/django/core/management/validation.py", line 3, in <module> 
    from django.contrib.contenttypes.generic import GenericForeignKey, GenericRelation 
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/contenttypes/generic.py", line 7, in <module> 
    from django.db import connection 
    File "/usr/local/lib/python2.7/dist-packages/django/db/__init__.py", line 27, in <module> 
    connection = connections[DEFAULT_DB_ALIAS] 
    File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 81, in __getitem__ 
    backend = load_backend(db['ENGINE']) 
    File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 23, in load_backend 
    return import_module('.base', backend_name) 
    File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named mysql.base 

Busqué en Google un poco, y se informó que este mensaje podría ser impreso si usa una versión anterior de MySQLd. Así que me aseguré de obtener la última versión. Y probé la importación en un shell de python interactivo. Está bien.

¿Alguna otra sugerencia, por qué esto no funciona?

Estoy trabajando en una nueva versión Ubuntu 11.04 instalada (Wubi en Windows 7), si eso es lo que importa. =)

+0

¿Qué versión de Django está ejecutando? 1.2.5 del paquete 'python-django' 1.3 del sitio web del proyecto? –

+1

Al ver el código fuente de 'django.db.utils.load_backend()', creo que debería usar ''django.db.backends.mysql'' en lugar de' 'mysql''. Esto probablemente solo le dará un mensaje de error diferente, pero uno más útil. –

+0

@Tim Yates: estoy usando la versión ''django.db.backends.mysql''. Lo revisé ayer desde el baúl, como se recomienda en el libro. Establecer 'ENGINE' a''django.db.backends.mysql'' en lugar de ''mysql'' hizo el trabajo. Muchas gracias MUC, @Tim. – Aufwind

Respuesta

18

La correcta database setting es 'django.db.backends.mysql'.

+1

Entonces, ¿qué pasa si la configuración de back-end produce este error después de 'manage.py inspectdb'; 'django.core.exceptions.ImproperlyConfigured: 'django.db.backends.mysql' no es un back-end de base de datos disponible. –

Cuestiones relacionadas