La base de datos incluida por defecto en django es db.sqlite3.
Al lanzar el servidor es habitual ver un mensaje similar a este "You have 18 unapplied migration(s)".
Las migraciones son una forma de actualizar nuestra base de datos desde código Python.
Desde código Python interaccionaremos con la base de datos creando las tablas, las relaciones, los usuarios, ...
Las migraciones nos permiten ahorrar trabajo ya que nos ayudan a crear las tablas y relaciones de la base de datos.
DB Browser for SWLite
Descargar este programa.
Está disponible para varios sistemas operativos, incluso para macOS (Apple Silicon).
Para actualizar la base de datos, detenemos el servidor y ejecutamos el comando:
python manage.py makemigrations
python manage.py migrate
Observamos la estructura que aparece con una serie de tablas e índices. Si aparecen cero tablas y cero índices lo que tenemos que hacer es abrir la base de datos con Archivo/Abrir base de datos. Navegamos hasta nuestro archivo que en mi caso está en:
/Users/apa/Documents/github/djangoproject/db.sqlite3
Estando dentro de la aplicación BD Browser for SQLite, pulsamos F5 para actualizar y ahora deberíamos observamos la estructura que aparece con una serie de tablas e índices ya creados por defecto.
Sobre la tabla de usuarios pedimos con el botón derecho del ratón Mostrar datos, en inglés aparece como Browse Table.
Esto nos permitirá ver los campos de la tabla de usuarios.
Unamos la aplicación myapp con la configuración del proyecto en mysite.
Django nos da unas tablas por defecto pero posteriormente nosotros desearemos hacer nuestras propias tablas para nuestro proyecto. Para hacer esto nosotros tenemos que poder crear lo que se llama un MODELO. Este modelo es código de Python que se va a transformar en una tabla de SQL. Ahora estamos trabajando en SQLite pero este script de Python se podrá ejecutar en otras base de datos, por ejemplo en postgreSQL, siempre y cuando le hayamos dado la conexión correcta.
Mi aplicación myapp va a tener una serie de modelos específicos para esta aplicación. Para ello nos vamos al archivo models.py que está dentro de la carpeta myapp.
Estando en myapp/models.py voy a crear un modelo específico.
from django.db import models
# Create your models here.
class Project(models.Model):
# los atributos de la clase serán los campos de la tabla
name = models.CharField(max_length=200)
Conectar la APP con el proyecto
Para que nuestra aplicación de django conozca nuestros modelos tenemos que conectar el modelo creado, para lo cual vamos a la carpeta principal del proyecto (mysite) y vamos al archivo settings.py y buscamos la sección que contiene la variable INSTALLED_APPS
que ya trae, por defecto una serie de conexiones.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
Hemos añadido al final de la lista 'myapp' y esto ya permite conectar el modelo creado en mi aplicación myapp con el proyecto django.
Ejecutamos las migraciones:
Ahora lanzamos nuevamente el servidor y en otra terminal ejecutamos:
python manage.py makemigrations
python manage.py migrate myapp
Añadir myapp después de migrate es optativo y se hace en caso de querer ejecutar únicamente las migraciones de esa APP.Creamos otra clase
from django.db import models
# Create your models here.
class Project(models.Model):
name = models.CharField(max_length=200)
class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
project = models.ForeignKey(Project, on_delete=models.CASCADE)
El atributo project indicamos que está relacionado con otro proyecto denominado Project, por eso ponemos que se necesita una clave foránea: models.ForeignKey(Project). Ahora volvemos a ejecutar los comandos para hacer las migraciones.
python manage.py makemigrations
python manage.py migrate
Veremos que se ha creado un nuevo archivo denominado myapp/migrations/0002_initial.py que contiene las nuevas migraciones y que tampoco debemos tocar.
Al refrescar la estructura de la base de datos con F5 en el programa DB Browser for SQLite podemos ver que se ha creado una nueva tabla para las tareas Task.Sección DATABASES en settings.py
Ya tenemos, por defecto esta sección en el archivo settings.py que está en mysite.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
Ahora no lo voy a hacer, pero en el futuro podré modificar esta configuración con otra que me permita utilizar otra base de datos, por ejemplo postgreSQL.
No hay comentarios:
Publicar un comentario