Blog
API RESTful en Flask – Migraciones
- Publicado por: Rafael Fernandez
- Categoría: API RESTful Blog
Instalación de SQlite
Crear y hacer la migración
Instalación de SQLite para el manejo de bases de datos
Para la instalación del manejador SQLite es necesario hacer los siguientes pasos:
- Ir a la página oficial de sqlite: https://www.sqlite.org
- Descargar los binarios como indica a continuación (para Windows en nuestro caso):
- Crear una carpeta llamada sqlite en la raíz del disco duro: C:\sqlite y descomprimir el contenido del zip ahi y quedará así:
- Agregamos este directorio al path en nuestras variables de entorno de windows:
Listo ya tendremos instalado nuestro sqlite y para probarlo podemos abrir una consola y escribir sqlite3 para confirmar que está instalado, tendría que verse así:
Para salir solo tienes que escribir “.quit” sin las comillas.
Creando Migraciones
Primero es necesario entender que es una migración, este término se refiere al proceso que necesitamos hacer para la construcción de la estructura que soportará nuestros datos, en nuestro caso tendremos un conjunto de migraciones y estas serán una lista de instrucciones que indicaran al manejador de base de datos (sqlite) que debe hacer o crear para que nosotros podamos trabajar con nuestros modelos, se creará al base de datos, las tablas con sus respectivos atributos y en algunos casos se crearán datos.
Para la creación de las migraciones utilizaremos una herramienta llamada “Alembic” que nos proporcionará las capacidad de ejecutar ciertos comandos con el objetivo de crear nuestras migraciones. así que lo primero que haremos será instalar la librería flask-migrate para esto escribimos dentro de nuestro virtualenv lo siguiente:
pip install Flask-Migrate
Ahora debemos agregar en algunas partes de los archivos base de la aplicación la importación de esta librería para poder utilizarla, entonces agregaremos la siguiente linea de código:
from flask_migrate import MigrateCommand
en el archivo app.py y en este mismo archivo agregaremos debajo de la creación del Manager(app) la siguiente linea de código:
manager.add_command('db', MigrateCommand)
para que podamos utilizar en la linea de comandos las distintas herramientas que nos permitirán crear y ejecutar las migraciones en nuestra aplicación.
El archivo app.py quedará así:
#! /usr/bin/env python import os from flask_migrate import MigrateCommand from flask_script import Manager, Server from app.backend import create_api app = create_api(os.getenv('FLASK_CONFIG') or 'default') if __name__ == '__main__': manager = Manager(app) manager.add_command('db', MigrateCommand) manager.add_command("runserver", Server(threaded=bool(int(os.environ.get('THREADED'))), port=int(os.environ.get('PORT')))) manager.run(default_command='runserver')
Otro cambio necesario es en el archivo extensions.py, en el cual vamos a agregar al inicio del archivo la siguiente linea para importar la librería de migraciones:
from flask_migrate import Migrate
y al final del mismo archivo vamos a agregar la siguiente linea:
migrate = Migrate()
de manera que el archivo extensions.py quedaría así:
from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy from flask_restplus import Api api = Api(version='v0.1', title='Tutorial API', description='tutorial para aprender a crear un API RESTful en Python') db = SQLAlchemy() migrate = Migrate()
También será necesario hacer un pequeño cambio en nuestro archivo backend.py en el cual tenemos que importar migrate de extensiones de manera que agregamos la linea:
from app.extensions import migrate
en la lista de imports, y adicionalmente dentro de la función create_api vamos a cambiar la linea que dice “db.init_app(app)” por lo siguiente:
migrate.init_app(app, db)
De esta manera podremos utilizar de manera exitosa los comandos para migrar nuestra base de datos.
El archivo backend.py quedaría así:
from flask import Flask from flask_cors import CORS from app.extensions import api, db, migrate from config import config def create_api(environment_name=None): app = Flask(__name__) app.config.from_object(config[environment_name]) CORS(app) with app.app_context(): migrate.init_app(app, db) api.init_app(app) return app
Ahora podemos crear la carpeta que guardará las migraciones ejecutando el siguiente comando en la raíz de nuestro proyecto:
python app.py db init
Veremos algo como esto en nuestra consola:
Con esto ya estaremos listo para crear las primeras migraciones, pero primero vamos a ir a app.py y tendremos que importar el modelo de Hotel, entonces colocaremos en la parte superior en donde se importan las demás librerías agregaremos la linea siguiente:
from app.model.hotel import Hotel
Guardamos el archivo app.py y ahora si podemos ejecutar el siguiente comando en la consola:
python app.py db migrate
entonces verán algo como lo siguiente:
Indicando que se ha creado la migración efectivamente, detectando el modelo “hotel” y añadiendo las instrucciones correspondientes para que este se pueda crear como una tabla en nuestra base de datos.
Si esto no te ha funcionado descarga el código que hemos explicado hasta el momento tutorial_api_p1
Ejecutando Migraciones
Ya teniendo las migraciones creadas solo necesitamos utilizar un comando para que estas se ejecuten y puedan crear o modificar la base de datos, es la parte mas sencilla, sin embargo hay que destacar que para que las migraciones puedan ejecutarse de manera correcta debemos tener modelos bien definidos que no tengan problemas de sintaxis ni de semántica.
Ahora para ejecutar esta migración vamos a utilizar el comando siguiente:
python app.py db upgrade
teniendo como resultado algo como lo siguiente:
Lo cual indica que nuestra base de datos ha sido creada con nuestra tabla para el manejo de los hoteles, hasta ahora vamos perfecto estamos muy cerca de poder proveer de estos datos a través de la definición de nuestra API RESTful, lo siguiente será definir los “namespaces” lo cual es una tarea muy sencilla, te invitamos a continuar con el tutorial.
➡ Esperamos que hayas puesto en práctica varios de los conceptos estudiados. Continúa aprendiendo mas con nuestro curso creación de APIs RESTful con Flask – Python:
Curso de creación de APIs RESTful con Flask – Python
[…] ➡ API RESTful en Flask – Migraciones […]