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:

pip install flask-sqlalchemy

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ó.

with app.app_context():
    db.create_all()

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 columna id de la taula user.
  • db.relationship('User', back_populates='posts'): Defineix una relació entre Post i User.

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

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