En aquest tema, aprendrem a definir models de dades utilitzant Flask-SQLAlchemy, una extensió de Flask que facilita la interacció amb bases de dades SQL. Els models són una representació de les taules de la base de dades en forma de classes Python, i cada instància d'una classe representa una fila de la taula.
Objectius
- Entendre què és un model en el context de Flask-SQLAlchemy.
- Aprendre a definir models de dades.
- Comprendre com es mapegen les classes Python a les taules de la base de dades.
- Crear relacions entre models.
Conceptes Clau
Què és un Model?
Un model és una classe Python que defineix l'estructura d'una taula de la base de dades. Cada atribut de la classe representa una columna de la taula.
Instal·lació de Flask-SQLAlchemy
Abans de començar, assegura't que tens Flask-SQLAlchemy instal·lat. Pots instal·lar-lo utilitzant pip:
Configuració de Flask-SQLAlchemy
Primer, hem de configurar Flask-SQLAlchemy en la nostra aplicació Flask. Afegirem la configuració necessària al nostre fitxer principal de l'aplicació.
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)
Definint un Model Bàsic
A continuació, definirem un model bàsic per a una taula User
amb els camps id
, username
, i email
.
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) def __repr__(self): return f'<User {self.username}>'
Explicació del Codi
db.Model
: La classe base de la qual hereten tots els models.db.Column
: Defineix una columna en la taula.db.Integer
,db.String
: Tipus de dades de la columna.primary_key=True
: Indica que aquesta columna és la clau primària.unique=True
: Indica que els valors en aquesta columna han de ser únics.nullable=False
: Indica que aquesta columna no pot ser nul·la.
Creant la Base de Dades
Després de definir els models, hem de crear la base de dades i les taules. Això es fa executant el següent codi en un context de l'aplicació.
Relacions entre Models
Flask-SQLAlchemy també permet definir relacions entre models. Per exemple, podem definir una relació un-a-molts entre User
i Post
.
class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(120), nullable=False) body = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) user = db.relationship('User', back_populates='posts') 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) posts = db.relationship('Post', back_populates='user') def __repr__(self): return f'<User {self.username}>'
Explicació del Codi
db.ForeignKey('user.id')
: Defineix una clau forana que enllaça amb la columnaid
de la taulauser
.db.relationship('User', back_populates='posts')
: Defineix una relació entrePost
iUser
.
Exercicis Pràctics
Exercici 1: Crear un Model de Producte
Defineix un model Product
amb els següents camps: id
, name
, price
, i description
.
class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) price = db.Column(db.Float, nullable=False) description = db.Column(db.Text, nullable=True) def __repr__(self): return f'<Product {self.name}>'
Exercici 2: Crear una Relació un-a-molts
Defineix una relació un-a-molts entre Category
i Product
.
class Category(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), unique=True, nullable=False) products = db.relationship('Product', back_populates='category') class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) price = db.Column(db.Float, nullable=False) description = db.Column(db.Text, nullable=True) category_id = db.Column(db.Integer, db.ForeignKey('category.id'), nullable=False) category = db.relationship('Category', back_populates='products') def __repr__(self): return f'<Product {self.name}>'
Conclusió
En aquest tema, hem après a definir models de dades utilitzant Flask-SQLAlchemy, a crear relacions entre models i a configurar la nostra aplicació Flask per utilitzar una base de dades. Aquests conceptes són fonamentals per a qualsevol aplicació web que necessiti emmagatzemar i gestionar dades de manera eficient. En el següent tema, explorarem com realitzar operacions CRUD (Crear, Llegir, Actualitzar, Esborrar) amb els nostres models.
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