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:
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:
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:
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:
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ó:
Finalment, apliquem la migració:
Exercicis Pràctics
-
Afegir un nou model: Crea un nou model
Post
amb els campsid
,title
,content
iuser_id
(clau forana aUser
). Genera i aplica la migració corresponent. -
Modificar un model existent: Afegeix un camp
bio
al modelUser
i actualitza la base de dades amb una nova migració.
Solucions
- 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
- 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
- Què és Flask?
- Configuració del Teu Entorn de Desenvolupament
- Creant la Teva Primera Aplicació Flask
- Entenent l'Estructura d'una Aplicació Flask
Mòdul 2: Conceptes Bàsics de Flask
- Enrutament i Mapeig d'URL
- Gestió de Mètodes HTTP
- Renderització de Plantilles amb Jinja2
- Treballant amb Fitxers Estàtics
Mòdul 3: Formularis i Entrada d'Usuari
Mòdul 4: Integració de Bases de Dades
- Introducció a Flask-SQLAlchemy
- Definició de Models
- Realització d'Operacions CRUD
- Migracions de Bases de Dades amb Flask-Migrate
Mòdul 5: Autenticació d'Usuaris
- Registre d'Usuaris
- Inici i Tancament de Sessió d'Usuaris
- Hashing de Contrasenyes
- Gestió de Sessions d'Usuaris
Mòdul 6: Conceptes Avançats de Flask
- Blueprints per a Aplicacions Grans
- Gestió d'Errors
- Pàgines d'Error Personalitzades
- Registre i Depuració
Mòdul 7: APIs RESTful amb Flask
- Introducció a les APIs RESTful
- Creació de Punts Finals RESTful
- Gestió de Dades JSON
- Autenticació per a APIs
Mòdul 8: Desplegament i Producció
- Configuració de Flask per a Producció
- Desplegament a Heroku
- Desplegament a AWS
- Monitorització i Optimització del Rendiment
Mòdul 9: Proves i Millors Pràctiques
- Proves Unitàries amb Flask
- Proves d'Integració
- Cobertura de Proves
- Millors Pràctiques per al Desenvolupament amb Flask