50% OFF Plus
--:--:--
¡Obtener!

MySQL con SQLAlchemy en Flask

Intermedio
Flask
Flask
Actualizado: 20/06/2025

¡Desbloquea el curso de Flask completo!

IA
Ejercicios
Certificado
Entrar

Mira la lección en vídeo

Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.

Desbloquear Plan Plus

Instalar Flask-SQLAlchemy y configurar conexión

Flask-SQLAlchemy es la extensión oficial que integra SQLAlchemy con Flask, proporcionando una capa de abstracción que simplifica la configuración y el uso del ORM en aplicaciones web. Esta extensión maneja automáticamente la configuración de la base de datos, las sesiones y el contexto de la aplicación.

Instalación de Flask-SQLAlchemy

Para comenzar a trabajar con Flask-SQLAlchemy, necesitas instalar la extensión junto con el driver de MySQL. Ejecuta el siguiente comando en tu entorno virtual:

pip install Flask-SQLAlchemy PyMySQL

PyMySQL es el driver recomendado para conectar Python con MySQL, ya que es una implementación pura de Python que no requiere dependencias adicionales del sistema.

Configuración básica de la aplicación

La configuración de Flask-SQLAlchemy se realiza mediante variables de configuración que defines en tu aplicación Flask. Estas variables controlan aspectos como la URL de conexión, el comportamiento de las transacciones y las opciones de depuración:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# Configuración de la base de datos
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://usuario:contraseña@localhost/nombre_bd'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# Inicializar SQLAlchemy
db = SQLAlchemy(app)

La variable SQLALCHEMY_DATABASE_URI define la cadena de conexión completa a tu base de datos MySQL. El formato sigue el patrón mysql+pymysql://usuario:contraseña@host:puerto/base_datos.

Estructura de la URL de conexión

La URL de conexión contiene todos los parámetros necesarios para establecer la comunicación con MySQL:

# Formato completo de la URL
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://usuario:contraseña@host:puerto/base_datos?charset=utf8mb4'

# Ejemplo con parámetros reales
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:mi_password@localhost:3306/mi_aplicacion?charset=utf8mb4'

Los componentes de la URL son:

  • mysql+pymysql: Especifica el motor de base de datos y el driver
  • usuario:contraseña: Credenciales de acceso a MySQL
  • host:puerto: Dirección del servidor (por defecto localhost:3306)
  • base_datos: Nombre de la base de datos a utilizar
  • charset=utf8mb4: Codificación de caracteres (recomendado para soporte completo de Unicode)

Configuración mediante variables de entorno

Para aplicaciones en producción, es fundamental no hardcodear las credenciales en el código. Utiliza variables de entorno para mantener la seguridad:

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# Configuración usando variables de entorno
app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get(
    'DATABASE_URL',
    'mysql+pymysql://root:password@localhost/desarrollo'
)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

Crea un archivo .env en la raíz de tu proyecto para definir las variables:

DATABASE_URL=mysql+pymysql://usuario:contraseña@localhost/mi_base_datos

Configuraciones adicionales importantes

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Flask-SQLAlchemy ofrece opciones de configuración adicionales que optimizan el rendimiento y el comportamiento de la aplicación:

app.config.update(
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:password@localhost/mi_app',
    SQLALCHEMY_TRACK_MODIFICATIONS=False,
    SQLALCHEMY_POOL_SIZE=10,
    SQLALCHEMY_POOL_TIMEOUT=20,
    SQLALCHEMY_POOL_RECYCLE=3600,
    SQLALCHEMY_ENGINE_OPTIONS={
        'pool_pre_ping': True,
        'pool_recycle': 300,
    }
)

Explicación de las configuraciones:

  • SQLALCHEMY_TRACK_MODIFICATIONS: Desactiva el seguimiento de modificaciones para mejorar el rendimiento
  • SQLALCHEMY_POOL_SIZE: Número máximo de conexiones permanentes en el pool
  • SQLALCHEMY_POOL_TIMEOUT: Tiempo de espera para obtener una conexión del pool
  • SQLALCHEMY_POOL_RECYCLE: Tiempo en segundos antes de recrear una conexión
  • pool_pre_ping: Verifica la conexión antes de usarla
  • pool_recycle: Recicla conexiones automáticamente

Verificación de la conexión

Para comprobar que la configuración es correcta, puedes crear una función simple que teste la conectividad:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/test_db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

def test_connection():
    try:
        # Intenta ejecutar una consulta simple
        db.engine.execute('SELECT 1')
        return "Conexión exitosa a MySQL"
    except Exception as e:
        return f"Error de conexión: {str(e)}"

if __name__ == '__main__':
    with app.app_context():
        result = test_connection()
        print(result)

Inicialización con Factory Pattern

Para aplicaciones más complejas, puedes usar el patrón Factory para inicializar Flask-SQLAlchemy de forma más flexible:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# Crear la instancia de SQLAlchemy sin vincularla a una app específica
db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    
    # Configuración
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/mi_app'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
    # Inicializar SQLAlchemy con la aplicación
    db.init_app(app)
    
    return app

# Uso del factory pattern
app = create_app()

Este enfoque permite mayor flexibilidad para testing, configuraciones múltiples y aplicaciones modulares, ya que puedes crear diferentes instancias de la aplicación con configuraciones distintas según el entorno de ejecución.

Aprendizajes de esta lección de Flask

  • Instalar y configurar Flask-SQLAlchemy junto con el driver PyMySQL para conectar Flask con MySQL.
  • Comprender la estructura y componentes de la URL de conexión a la base de datos.
  • Aplicar buenas prácticas usando variables de entorno para gestionar credenciales de forma segura.
  • Configurar opciones avanzadas de conexión para optimizar el rendimiento y la estabilidad.
  • Implementar el patrón Factory para inicializar Flask-SQLAlchemy en aplicaciones modulares y complejas.

Completa este curso de Flask y certifícate

Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración