Actualización de Flask SQLAlchemy

Salman Mehmood 21 junio 2023
Actualización de Flask SQLAlchemy

Aprenderemos, con esta explicación, cómo insertar y actualizar una fila con la ayuda de la base de datos SQLAlchemy en la aplicación Flask.

Actualice una fila con la ayuda de la base de datos SQLAlchemy en la aplicación Flask

Tenemos un modelo simple llamado Employee_Model, que tiene un par de campos. Estaremos trabajando en este modelo.

from datetime import datetime
from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///db.sqlite3"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)


class Employee_Model(db.Model):
    Employee_ID = db.Column(db.Integer, primary_key=True)
    Employee_Name = db.Column(db.String(50))
    Employee_Email = db.Column(db.String(100), unique=True)
    Date_Field = db.Column(db.Date, default=datetime.utcnow)

    def __repr__(self):
        return f"<Employee_Model: {self.Employee_Email}>"


if __name__ == "__main__":
    app.run(debug=True)

Ahora abriremos el shell de Python e importaremos db y Employee_Model desde nuestra aplicación Flask. Luego, crearemos la base de datos usando db.create_all().

Usaremos Employee_Model.query.all() para mostrarle que no hay nada en la base de datos.

>>> from app import db,Employee_Model
>>> db.create_all()
>>> Employee_Model.query.all()
[]

Ahora lo primero que debemos hacer es insertar datos en la base de datos antes de actualizar los datos. Para hacer esto, estamos instanciando nuestro modelo Employee_Model.

Vamos a instanciarlo con los campos. No estamos utilizando Employee_ID o Date_Field porque ambos campos se pueden generar automáticamente.

La base de datos genera Employee_ID y Date_Field tiene el valor predeterminado, es decir, datetime.utcnow. Luego agregaremos una sola fila de datos usando db.session.add() y pasaremos un objeto.

Luego, confirmaremos los datos usando db.session.commit(), que guardará todo. Cuando ejecutamos el comando Employee_Model.query.all(), veremos un Empleado en la base de datos, y podemos ver el objeto Date_Field usando el jack.Date_Field que tiene la fecha.

>>> jack=Employee_Model(Employee_Name='jack',Employee_Email='jack@something.com')
>>> db.session.add(jack)
>>> db.session.commit()
>>> Employee_Model.query.all()
[<Employee: jack@something.com>]
>>> jack.Date_Field
datetime.date(2022, 7, 14)

Podemos hacerlo manualmente si no queremos usar la fecha por defecto. Para ello, importaremos la fecha desde datetime, y luego podremos crear un nuevo Empleado con el nombre de objeto laura.

Proporcionaremos un nombre en el correo electrónico a la clase Employee_Model(), y luego pasaremos Date_Field.

Ahora necesitamos agregar el objeto laura dentro de la base de datos y guardarlo en la base de datos. Si extraemos la consulta de la base de datos, vemos dos empleados en la base de datos.

>>> from datetime import date
>>> from app import db,Employee_Model
>>>laura=Employee_Model(Employee_Name='laura',Employee_Email='laura@something.com',Date_Field=date(2022,7,14))
>>> db.session.add(laura)
>>> db.session.commit()
>>> Employee_Model.query.all()
[<Employee: jack@something.com>, <Employee: laura@something.com>]

Ahora actualizaremos los datos en la base de datos para algo en particular. Supongamos que queremos consultar por el objeto jack.

Para ello, filtraremos el objeto jack usando filter_by(Employee_Name='jack'), lo que significa que estamos buscando cualquier fila con el nombre jack. Queremos obtener el primer resultado, y debe ser único.

Ahora, actualizaremos el campo Employee_Email utilizando el operador de asignación y luego lo confirmaremos para guardar el registro actualizado en la base de datos. Cuando realizamos la consulta y obtenemos todos los usuarios en la base de datos, en lugar de ver jack@something.com, vemos jack123@something.com.

>>> from app import db,Employee_Model
>>> jack=Employee_Model.query.filter_by(Employee_Name='jack').first()
>>> jack
<Employee: jack@something.com>
>>> jack.Employee_Email='jack123@something.com'
>>> db.session.commit()
>>> Employee_Model.query.all()
[<Employee: jack123@something.com>, <Employee: laura@something.com>]
>>> jack.Employee_Email
'jack123@something.com'
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Flask SQLAlchemy