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'
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