Con toda esta filosofía en mente, vamos a comenzar a explorar la capa de la base de datos de Django. Primero, necesitamos tener en cuenta algunas configuraciones iniciales: necesitamos indicarle a Django qué servidor de base de datos usar y cómo conectarse con el mismo.
Asumimos que haz configurado un servidor de base de datos, lo has activado, y
has creado una base de datos en este (por ej. usando la sentencia
CREATE DATABASE
). SQLite es un caso especial; es este caso, no hay que
crear una base de datos, porque SQLite usa un archivo autónomo sobre el
sistema de archivos para guardar los datos.
Como con TEMPLATE_DIRS
en los capítulos anteriores, la configuración de la
base de datos se encuentra en el archivo de configuración de Django, llamado,
por omisión, settings.py
. Edita este archivo y busca las opciones de la
base de datos:
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
Aquí hay un resumen de cada propiedad.
DATABASE_ENGINE
le indica a Django qué base de datos utilizar. Si usas una base de datos con Django,DATABASE_ENGINE
debe configurarse con un string de los mostrados en la Tabla 5-1.
Configuración | Base de datos | Adaptador requerido |
---|---|---|
postgresql |
PostgreSQL | psycopg versión 1.x |
postgresql_psycopg2 |
PostgreSQL | psycopg versión 2.x |
mysql |
MySQL | MySQLdb |
sqlite3 |
SQLite | No necesita adaptador si se usa Python 2.5+. En caso contrario, pysqlite |
ado_mssql |
Microsoft SQL Server | adodbapi version 2.0.1+ |
oracle |
Oracle | cx_Oracle |
Nota Cualquiera sea la base de datos que uses, necesitarás descargar e instalar el adaptador apropiado. Cada uno de estos está disponible libremente en la web; sólo sigue el enlace en la columna "Adaptador requerido" en la Tabla 5-1.
DATABASE_NAME
la indica a Django el nombre de tu base de datos. Si estás usando SQLite, especifica la ruta completo del sistema de archivos hacia el archivo de la base de datos (por ej.'/home/django/mydata.db'
).DATABASE_USER
le indica a Django cual es el nombre de usuario a usar cuando se conecte con tu base de datos. Si estás usando SQLite, deja este en blanco.DATABASE_PASSWORD
le indica a Django cual es la contraseña a utilizar cuando se conecte con tu base de datos. Si estás utilizando SQLite o tienes una contraseña vacía, deja este en blanco.DATABASE_HOST
le indica a Django cual es el host a usar cuando se conecta a tu base de datos. Si tu base de datos está sobre la misma computadora que la instalación de Django (o sea localhost), deja este en blanco. Si estás usando SQLite, deja este en blanco.
MySQL es un caso especial aquí. Si este valor comienza con una barra (`'/'`) y estás usando MySQL, MySQL se conectará al socket especificado por medio de un socket Unix. Si estás utilizando MySQL y este valor *no* comienza con una barra, entonces este valor es asumido como el host. Ejemplo:
DATABASE_HOST = '/var/run/mysql'
DATABASE_PORT
le indica a Django qué puerto usar cuando se conecte a la base de datos. Si estás utilizando SQLite, deja este en blanco. En otro caso, si dejas este en blanco, el adaptador de base de datos subyacente usará el puerto por omisión acorde al servidor de base de datos. En la mayoría de los casos, el puerto por omisión está bien, por lo tanto puedes dejar este en blanco.
Una vez que hayas ingresado estas configuraciones, compruébalas. Primero,
desde el directorio del proyecto que creaste en el Capítulo 2, ejecuta el
comando python manage.py shell
.
Notarás que comienza un intérprete interactivo de Python. Las apariencias
pueden engañar. Hay una diferencia importante entre ejecutar el comando
python manage.py shell
dentro del directorio del proyecto de Django y el
más genérico python
. El último es el Python shell básico, pero el anterior
le indica a Django cuales archivos de configuración usar antes de comenzar el
shell. Este es un requerimiento clave para hacer consultas a la base de datos:
Django necesita saber cuales son los archivos de configuraciones a usar para
obtener la información de la conexión a la base de datos.
Detrás de escena, python manage.py shell
simplemente asume que tu
archivo de configuración está en el mismo directorio que manage.py
. Hay
otras maneras de indicarle a Django qué módulo de configuración usar, pero
este subtítulo lo cubriremos luego. Por ahora, usa python manage.py shell
cuando necesites hacer modificaciones específicas a Django.
Una vez que hayas entrado al shell, escribe estos comando para probar la configuración de tu base de datos:
>>> from django.db import connection
>>> cursor = connection.cursor()
Si no sucede nada, entonces tu base de datos está configurada correctamente. De lo contrario revisa el mensaje de error para obtener un indicio sobre qué es lo que está mal:
- Error: You haven't set the DATABASE_ENGINE setting yet.
**Solución**: Configura la variable `DATABASE_ENGINE` con otra cosa que un string vacío.
- Error: Environment variable DJANGO_SETTINGS_MODULE is undefined.
**Solución**: Ejecuta el comando `python manage.py shell` en vez de `python`.
- Error: Error loading _____ module: No module named _____.
**Solución**: No tienes instalado el módulo apropiado para la base de datos especificada (por ej. `psycopg` o `MySQLdb`).
- Error: _____ isn't an available database backend.
**Solución**: Configura la variable `DATABASE_ENGINE` con un motor válido descrito previamente. ¿Habrás cometido un error de tipeo?
- Error: database _____ does not exist
**Solución**: Cambia la variable `DATABASE_NAME` para que *apunte* a una base de datos existente, o ejecuta la sentencia `CREATE DATABASE` apropiada para crearla.
- Error: role _____ does not exist
**Solución**: Cambia la variable `DATABASE_USER` para que *apunte* a un usuario que exista, o crea el usuario en tu base de datos.
- Error: could not connect to server
**Solución**: Asegúrate de que `DATABASE_HOST` y `DATABASE_PORT` estén configurados correctamente y que el servidor esté corriendo.