Saltar al contenido
Creación de Aplicaciones Web con Flask y Python

Conexión a bases de datos con Flask

Introducción

Flask es un framework de desarrollo web relativamente sencillo y ligero para Python. Aunque Flask no viene con un ORM (Object Relational Mapper) incorporado, permite a los desarrolladores configurar y conectarse fácilmente a distintas bases de datos, tales como SQL, NoSQL, u otras.

Para conectarse a una base de datos con Flask, es necesario agregar una extensión de base de datos a nuestra aplicación. A menudo, la extensión más común utilizada para conectarse a bases de datos en Flask es la llamada SQLAlchemy, que ofrece una capa de abstracción de bases de datos y facilita la configuración y el manejo de la conexión.

Una vez que se ha agregado la extensión de base de datos a nuestra aplicación, debe configurarse la conexión a la base de datos. Flask ofrece opciones de configuración para la ubicación de la base de datos, el tipo de base de datos y otros parámetros, dependiendo de las necesidades del proyecto.

En resumen, la conexión a una base de datos con Flask es sencilla y flexible gracias a su estructura modular, lo que permite a los desarrolladores adaptar la conexión a una variedad de bases de datos y necesidades de sus proyectos.

Resumen

Una de las funcionalidades más importantes que tiene Flask es la capacidad de conectarse a bases de datos, lo cual permite que las aplicaciones desarrolladas con este framework puedan almacenar y recuperar información de forma eficiente y segura. Para trabajar con bases de datos en Flask, es necesario utilizar una extensión de Flask llamada SQLAlchemy, la cual permite establecer conexión con una variedad de bases de datos como MySQL, PostgreSQL, SQLite, entre otras.

Para empezar a utilizar SQLAlchemy en una aplicación Flask, se debe instalar la extensión utilizando pip:

pip install flask-sqlalchemy

Luego de instalar la extensión, se debe crear una instancia de la clase SQLAlchemy, la cual es utilizada como interfaz entre Flask y la base de datos. La instancia se puede crear de la siguiente manera:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydb.db'
db = SQLAlchemy(app)

En el ejemplo anterior, se está definiendo una instancia de SQLAlchemy llamada 'db', la cual está conectada a una base de datos en SQLite llamada 'mydb.db'. Es importante destacar que Flask utiliza la URI de la base de datos para conectarse, la cual debe estar correctamente formateada y debe incluir información de autenticación si es necesario.

Una vez que se ha creado la instancia de SQLAlchemy, es posible definir los modelos de la aplicación, los cuales son representaciones de objetos que se almacenarán en la base de datos. Para definir un modelo, se debe crear una clase que herede de la clase Model de SQLAlchemy y se debe definir una serie de atributos que representen las columnas de la tabla en la base de datos.

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)

En este caso se está definiendo un modelo llamado User, el cual tiene tres campos: id, username y email. El campo id es la clave primaria de la tabla y es de tipo Integer, mientras que los campos username y email son de tipo String y tienen un tamaño máximo de 80 y 120 caracteres respectivamente. Además, se está indicando que las columnas username y email son únicas y no pueden ser nulas.

Una vez que se han definido los modelos, es posible interactuar con la base de datos desde los controladores de la aplicación Flask utilizando los métodos definidos en la instancia de SQLAlchemy. Por ejemplo, para insertar un nuevo usuario en la base de datos, se puede escribir el siguiente código:

user = User(username='jdoe', email='jdoe@example.com')
db.session.add(user)
db.session.commit()

En este caso, se está creando una nueva instancia de la clase User con los valores de username y email especificados. Luego, se está agregando la instancia a la sesión de SQLAlchemy utilizando el método add y se está realizando un commit para guardar los cambios en la base de datos.

En resumen, conectar una base de datos con Flask requiere la utilización de una extensión llamada SQLAlchemy, la cual permite establecer la conexión a diferentes bases de datos y realizar operaciones utilizando ORM. Luego, se deben definir los modelos de la aplicación y utilizar la instancia de SQLAlchemy para interactuar con la base de datos desde los controladores.

Aplicación teórica

Un ejemplo práctico de cómo conectarse a una base de datos con Flask:

Lo primero es instalar el paquete Flask-SQLAlchemy:

pip install flask-sqlalchemy

Luego importamos las librerías necesarias y configuramos la conexión a la base de datos:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////ruta/a/la/base/de/datos'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

En la línea 4 estamos configurando la conexión a la base de datos SQLlite. Sin embargo, puedes usar otro motor de base de datos como MySQL, PostgreSQL, Oracle, etc. La línea 5 desactiva el seguimiento de las modificaciones realizadas en la base de datos.

La clase SQLAlchemy proporciona una interfaz elegante para trabajar con bases de datos relacionales. A continuación te mostraré cómo crear un modelo para una tabla de usuarios:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    email = db.Column(db.String(120), unique=True)

    def __init__(self, name, email):
        self.name = name
        self.email = email

En la línea 2 estamos creando la clase User que extiende la clase `db.Model` que es parte de la SQLAlchemy. En las líneas 3-5 se definen las columnas de la tabla con sus nombres y sus tipos de datos. En la línea 7-10 estamos creando el constructor de la clase User.

Una vez que hemos definido nuestro modelo, podemos utilizar SQLAlchemy para crear la tabla y hacer operaciones CRUD:

# Crear la tabla
db.create_all()

# Insertar un nuevo usuario
new_user = User('John', 'john@example.com')
db.session.add(new_user)
db.session.commit()

# Obtener todos los usuarios
users = User.query.all()

# Obtener un usuario por ID
user = User.query.get(1)

# Modificar un usuario
user.name = 'Jane'
db.session.commit()

# Eliminar un usuario
db.session.delete(user)
db.session.commit()

En la línea 2 estamos creando la tabla de User. Luego, en las líneas 5-6 estamos insertando un nuevo usuario en la tabla User. En la línea 9 estamos obteniendo todos los usuarios de la tabla User. En la línea 12 estamos obteniendo el usuario con id=1. Luego, en las líneas 15-16 estamos modificando el nombre del primer usuario y en las líneas 19-20 estamos eliminando el primer usuario.

Este es solo un ejemplo básico de cómo puedes utilizar Flask para conectarte a una base de datos y realizar operaciones CRUD. Con Flask-SQLAlchemy puedes realizar muchas más operaciones de manera elegante y eficiente en código.

Aplicación práctica

Para conectarse a una base de datos con Flask, primero debe importar Flask y SQLAlchemy. Luego, puede crear una conexión a una base de datos utilizando el objeto SQLAlchemy de la siguiente manera:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:password@localhost/mydatabase'
db = SQLAlchemy(app)

En el ejemplo anterior, la conexión a la base de datos se establece con PostgreSQL. Se debe reemplazar 'user', 'password' y 'mydatabase' con los datos de su propia base de datos.

Para crear una tabla en la base de datos, por ejemplo, una tabla de usuarios, puede crear una clase en Python que represente a la tabla de usuarios y luego, pasarlo al objeto SQLAlchemy.

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

La clase User en este caso representa la tabla de usuarios en la base de datos. id, username, y email son columnas de la tabla.

Después de crear la clase de modelo, puede crear la tabla en la base de datos con el siguiente comando en la terminal.

db.create_all()

Con esto, se generará la tabla users en la base de datos. Luego, puede usar la tabla para realizar operaciones CRUD como agregar, leer, actualizar y eliminar registros.

Por ejemplo, para agregar un nuevo usuario a la tabla, puede usar el siguiente código:

new_user = User('johndoe', 'johndoe@example.com')
db.session.add(new_user)
db.session.commit()

Este código crea un nuevo usuario con el nombre de usuario "johndoe" y el correo electrónico "johndoe@example.com", lo agrega a la sesión de base de datos y luego confirma los cambios con db.session.commit().

De esta manera, puede conectarse a una base de datos y realizar operaciones CRUD en Flask.