En aquest tema, aprendrem com gestionar les migracions de bases de dades en una aplicació Flask utilitzant Flask-Migrate. Les migracions de bases de dades són essencials per mantenir la coherència de l'esquema de la base de dades a mesura que l'aplicació evoluciona.

Què és Flask-Migrate?

Flask-Migrate és una extensió que utilitza Alembic per gestionar les migracions de bases de dades en aplicacions Flask que utilitzen SQLAlchemy. Alembic és una eina de migració de bases de dades per a SQLAlchemy que permet definir i aplicar canvis a l'esquema de la base de dades de manera controlada.

Instal·lació de Flask-Migrate

Per començar, hem d'instal·lar Flask-Migrate. Pots fer-ho utilitzant pip:

pip install Flask-Migrate

Configuració de Flask-Migrate

Un cop instal·lat, hem de configurar Flask-Migrate a la nostra aplicació Flask. A continuació, es mostra un exemple de com fer-ho:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
db = SQLAlchemy(app)
migrate = Migrate(app, db)

# Definició de models
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

if __name__ == '__main__':
    app.run(debug=True)

Creació de Migracions

Un cop configurat Flask-Migrate, podem començar a crear migracions. Primer, hem de crear el directori de migracions:

flask db init

Aquest comandament crearà un directori migrations a la teva aplicació. Després, podem generar una nova migració cada vegada que fem canvis als nostres models:

flask db migrate -m "Descripció de la migració"

Aquest comandament crearà un nou fitxer de migració al directori migrations/versions amb els canvis detectats als models.

Aplicació de Migracions

Per aplicar les migracions a la base de dades, utilitzem el següent comandament:

flask db upgrade

Aquest comandament aplicarà tots els canvis pendents a la base de dades.

Exemple Pràctic

Suposem que volem afegir un nou camp age al model User. Primer, actualitzem el model:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    age = db.Column(db.Integer)  # Nou camp afegit

Després, generem una nova migració:

flask db migrate -m "Afegir camp age al model User"

Finalment, apliquem la migració:

flask db upgrade

Exercicis Pràctics

  1. Afegir un nou model: Crea un nou model Post amb els camps id, title, content i user_id (clau forana a User). Genera i aplica la migració corresponent.

  2. Modificar un model existent: Afegeix un camp bio al model User i actualitza la base de dades amb una nova migració.

Solucions

  1. Afegir un nou model:
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), nullable=False)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

# Generar i aplicar la migració
flask db migrate -m "Afegir model Post"
flask db upgrade
  1. Modificar un model existent:
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    age = db.Column(db.Integer)
    bio = db.Column(db.Text)  # Nou camp afegit

# Generar i aplicar la migració
flask db migrate -m "Afegir camp bio al model User"
flask db upgrade

Resum

En aquest tema, hem après com utilitzar Flask-Migrate per gestionar les migracions de bases de dades en una aplicació Flask. Hem vist com instal·lar i configurar Flask-Migrate, com crear i aplicar migracions, i hem practicat amb exemples reals. Les migracions de bases de dades són una eina poderosa per mantenir la coherència de l'esquema de la base de dades a mesura que l'aplicació evoluciona.

Curs de Desenvolupament Web amb Flask

Mòdul 1: Introducció a Flask

Mòdul 2: Conceptes Bàsics de Flask

Mòdul 3: Formularis i Entrada d'Usuari

Mòdul 4: Integració de Bases de Dades

Mòdul 5: Autenticació d'Usuaris

Mòdul 6: Conceptes Avançats de Flask

Mòdul 7: APIs RESTful amb Flask

Mòdul 8: Desplegament i Producció

Mòdul 9: Proves i Millors Pràctiques

Mòdul 10: Extensions i Ecosistema de Flask

© Copyright 2024. Tots els drets reservats