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
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.
Fuentes y referencias
Documentación oficial y recursos externos para profundizar en Flask
Documentación oficial de Flask
Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Flask es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.
Más tutoriales de Flask
Explora más contenido relacionado con Flask y continúa aprendiendo con nuestros tutoriales gratuitos.
Aprendizajes de esta lección
- 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.
Cursos que incluyen esta lección
Esta lección forma parte de los siguientes cursos estructurados con rutas de aprendizaje