En aquest tema, aprendrem a realitzar operacions CRUD (Create, Read, Update, Delete) utilitzant Flask-SQLAlchemy. Aquestes operacions són fonamentals per a la gestió de dades en qualsevol aplicació web.
Objectius
- Entendre què són les operacions CRUD.
- Aprendre a crear, llegir, actualitzar i eliminar registres en una base de dades utilitzant Flask-SQLAlchemy.
- Implementar exemples pràctics per reforçar els conceptes apresos.
Què són les Operacions CRUD?
CRUD és un acrònim que representa les quatre operacions bàsiques que es poden realitzar en una base de dades:
- Create (Crear): Afegir nous registres a la base de dades.
- Read (Llegir): Recuperar registres de la base de dades.
- Update (Actualitzar): Modificar registres existents a la base de dades.
- Delete (Eliminar): Esborrar registres de la base de dades.
Configuració Inicial
Abans de començar, assegura't que tens Flask-SQLAlchemy instal·lat i configurat en la teva aplicació Flask. Si no ho has fet, pots seguir les instruccions del tema anterior sobre Introducció a Flask-SQLAlchemy.
Definició del Model
Primer, definirem un model senzill per a una taula User
que utilitzarem per a les nostres operacions CRUD.
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db' db = SQLAlchemy(app) 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}>' # Crear la base de dades i les taules with app.app_context(): db.create_all()
Crear (Create)
Per crear un nou registre a la base de dades, primer creem una instància del model i després la guardem a la base de dades.
@app.route('/create_user') def create_user(): new_user = User(username='john_doe', email='[email protected]') db.session.add(new_user) db.session.commit() return 'User created successfully!'
Llegir (Read)
Per llegir registres de la base de dades, utilitzem les funcions de consulta proporcionades per SQLAlchemy.
Llegir tots els usuaris
Llegir un usuari per ID
Actualitzar (Update)
Per actualitzar un registre existent, primer el recuperem de la base de dades, fem els canvis necessaris i després guardem els canvis.
@app.route('/update_user/<int:id>') def update_user(id): user = User.query.get(id) if user: user.username = 'jane_doe' db.session.commit() return 'User updated successfully!' return 'User not found!'
Eliminar (Delete)
Per eliminar un registre, primer el recuperem de la base de dades i després el suprimim.
@app.route('/delete_user/<int:id>') def delete_user(id): user = User.query.get(id) if user: db.session.delete(user) db.session.commit() return 'User deleted successfully!' return 'User not found!'
Exercicis Pràctics
Exercici 1: Crear un Nou Usuari
Crea una ruta /create_user/<username>/<email>
que permeti crear un nou usuari amb el nom d'usuari i el correu electrònic proporcionats a la URL.
Exercici 2: Llegir Usuaris per Correu Electrònic
Crea una ruta /read_user_by_email/<email>
que permeti llegir un usuari de la base de dades utilitzant el seu correu electrònic.
Exercici 3: Actualitzar el Correu Electrònic d'un Usuari
Crea una ruta /update_user_email/<int:id>/<new_email>
que permeti actualitzar el correu electrònic d'un usuari amb l'ID proporcionat.
Exercici 4: Eliminar un Usuari per Nom d'Usuari
Crea una ruta /delete_user_by_username/<username>
que permeti eliminar un usuari de la base de dades utilitzant el seu nom d'usuari.
Solucions als Exercicis
Solució 1: Crear un Nou Usuari
@app.route('/create_user/<username>/<email>') def create_user(username, email): new_user = User(username=username, email=email) db.session.add(new_user) db.session.commit() return 'User created successfully!'
Solució 2: Llegir Usuaris per Correu Electrònic
@app.route('/read_user_by_email/<email>') def read_user_by_email(email): user = User.query.filter_by(email=email).first() return str(user)
Solució 3: Actualitzar el Correu Electrònic d'un Usuari
@app.route('/update_user_email/<int:id>/<new_email>') def update_user_email(id, new_email): user = User.query.get(id) if user: user.email = new_email db.session.commit() return 'User email updated successfully!' return 'User not found!'
Solució 4: Eliminar un Usuari per Nom d'Usuari
@app.route('/delete_user_by_username/<username>') def delete_user_by_username(username): user = User.query.filter_by(username=username).first() if user: db.session.delete(user) db.session.commit() return 'User deleted successfully!' return 'User not found!'
Conclusió
En aquest tema, hem après a realitzar operacions CRUD utilitzant Flask-SQLAlchemy. Aquestes operacions són essencials per a la gestió de dades en qualsevol aplicació web. Hem vist com crear, llegir, actualitzar i eliminar registres en una base de dades, i hem practicat aquests conceptes amb exemples pràctics.
En el següent tema, explorarem com realitzar migracions de bases de dades amb Flask-Migrate per gestionar els canvis en l'esquema de la base de dades de manera eficient.
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