Conectar Django a una Base de Datos Existente

Integrar Django con una base de datos heredada es una tarea común, especialmente cuando necesitas agregar nuevas funciones o interfaces sin migrar toda la base de datos. Django proporciona herramientas que facilitan este proceso, permitiéndote trabajar con una base de datos existente mientras aprovechas el ORM y la interfaz de administración de Django.

1Configurar la Conexión a la Base de Datos

Antes de integrar Django con la base de datos heredada, necesitarás especificar los parámetros de conexión en la configuración DATABASES en settings.py. Debes incluir parámetros como:

  • NAME: El nombre de tu base de datos.
  • ENGINE: El motor de base de datos que usarás (por ejemplo, 'django.db.backends.postgresql', 'django.db.backends.mysql', etc.).
  • USER: El nombre de usuario para tu base de datos.
  • PASSWORD: La contraseña para el usuario de la base de datos.
  • HOST: El host donde se encuentra la base de datos (por ejemplo, 'localhost' o una dirección de servidor remoto).
  • PORT: El número de puerto para tu base de datos (por ejemplo, 5432 para PostgreSQL).

Ejemplo de configuración para una base de datos PostgreSQL:

python
DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.postgresql',
      'NAME': 'legacy_db',
      'USER': 'db_user',
      'PASSWORD': 'db_password',
      'HOST': 'localhost',
      'PORT': '5432',
  }
}
2Generar Modelos a partir de la Base de Datos Legada

Django incluye una herramienta llamada inspectdb que puede generar automáticamente definiciones de modelos al inspeccionar una base de datos existente. Esta herramienta es útil cuando trabajas con un sistema heredado y no deseas definir manualmente todos los modelos.

Para generar los modelos, ejecuta el siguiente comando:

bash
python manage.py inspectdb

Este comando generará un código de modelos de Django basado en el esquema de tu base de datos heredada. Puedes guardar la salida en un archivo Python con:

bash
python manage.py inspectdb > models.py

Limpiar los Modelos Generados

La salida de inspectdb no siempre es perfecta y puede requerir ajustes. Por ejemplo, Django genera modelos no gestionados de forma predeterminada, lo que significa que Django no gestionará el esquema de la base de datos (creación de tablas, migraciones, etc.) para estos modelos. Puedes modificar este comportamiento configurando managed = True en la clase Meta del modelo si deseas que Django gestione la tabla:

python
class Person(models.Model):
  id = models.IntegerField(primary_key=True)
  first_name = models.CharField(max_length=70)

  class Meta:
      managed = False  # Cambia a True si quieres que Django gestione la tabla
      db_table = 'legacy_persons'

Una vez que hayas limpiado los modelos, coloca el archivo models.py en la carpeta de tu aplicación y agrega la aplicación a la lista INSTALLED_APPS en settings.py.

python
INSTALLED_APPS = [
  # Otras aplicaciones...
  'your_app_name',
]
3Aplicar las Migraciones Básicas de Django

Ahora que tienes los modelos de la base de datos heredada configurados, necesitas ejecutar las migraciones de Django para instalar tablas adicionales como auth (para autenticación) y contenttypes. Esto asegurará que el sistema de administración y permisos de Django funcione correctamente en tu proyecto.

Ejecuta:

bash
python manage.py migrate

Este comando aplica las migraciones para las aplicaciones integradas de Django.

4Probar y Refinar

En este punto, deberías poder interactuar con tu base de datos heredada a través del ORM de Django. Utiliza la interfaz de administración de Django para ver y editar los datos, o interactúa con los datos usando la API de base de datos de Django.