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 PlusInstalar 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.
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 rendimientoSQLALCHEMY_POOL_SIZE
: Número máximo de conexiones permanentes en el poolSQLALCHEMY_POOL_TIMEOUT
: Tiempo de espera para obtener una conexión del poolSQLALCHEMY_POOL_RECYCLE
: Tiempo en segundos antes de recrear una conexiónpool_pre_ping
: Verifica la conexión antes de usarlapool_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