Flask SQLAlchemy-Update
Wir werden mit dieser Erklärung lernen, wie man eine Zeile mit Hilfe der SQLAlchemy-Datenbank in der Flask-App einfügt und aktualisiert.
Aktualisieren Sie eine Zeile mithilfe der SQLAlchemy-Datenbank in der Flask-App
Wir haben ein einfaches Modell namens Employee_Model
, das ein paar Felder hat. Wir werden an diesem Modell arbeiten.
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)
Jetzt öffnen wir die Python-Shell und importieren db
und Employee_Model
aus unserer Flask-App. Dann erstellen wir die Datenbank mit db.create_all()
.
Wir werden Employee_Model.query.all()
verwenden, um Ihnen zu zeigen, dass sich nichts in der Datenbank befindet.
>>> from app import db,Employee_Model
>>> db.create_all()
>>> Employee_Model.query.all()
[]
Jetzt müssen wir als erstes Daten in die Datenbank einfügen, bevor wir die Daten aktualisieren. Dazu instanziieren wir unser Modell Employee_Model
.
Wir werden es mit den Feldern instanziieren. Wir verwenden nicht Employee_ID
oder Date_Field
, da beide Felder automatisch generiert werden können.
Employee_ID
wird von der Datenbank generiert und Date_Field
erhält den Standardwert, also datetime.utcnow
. Dann fügen wir eine einzelne Datenzeile mit db.session.add()
hinzu und übergeben ein Objekt.
Dann werden wir die Daten mit db.session.commit()
übergeben, wodurch alles gespeichert wird. Wenn wir den Befehl Employee_Model.query.all()
ausführen, sehen wir einen Mitarbeiter in der Datenbank, und wir können das Date_Field
-Objekt mit dem jack.Date_Field
sehen, das das Datum enthält.
>>> 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)
Wir können dies manuell tun, wenn wir das Standarddatum nicht verwenden möchten. Dazu importieren wir das Datum aus datetime
und können dann einen neuen Mitarbeiter mit dem Objektnamen laura
erstellen.
Wir werden einen Namen in der E-Mail an die Klasse Employee_Model()
liefern und dann Date_Field
übergeben.
Jetzt müssen wir das Objekt laura
in die Datenbank einfügen und in der Datenbank speichern. Wenn wir die Abfrage aus der Datenbank extrahieren, sehen wir zwei Mitarbeiter in der Datenbank.
>>> 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>]
Jetzt werden wir Daten in der Datenbank für eine bestimmte Sache aktualisieren. Angenommen, wir möchten das Objekt jack
abfragen.
Dazu filtern wir das Objekt jack
mit filter_by(Employee_Name='jack')
, suchen also nach einer beliebigen Zeile mit dem Namen jack. Wir möchten das erste Ergebnis erhalten, und es sollte eindeutig sein.
Jetzt aktualisieren wir das Feld Employee_Email
mit dem Zuweisungsoperator und verpflichten es dann, den aktualisierten Datensatz in der Datenbank zu speichern. Wenn wir die Abfrage durchführen und alle Benutzer in der Datenbank abrufen, sehen wir statt jack@something.com
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