SQLAlchemy ORM - Objekte aktualisieren

In diesem Kapitel erfahren Sie, wie Sie die Tabelle mit den gewünschten Werten ändern oder aktualisieren.

Um Daten eines bestimmten Attributs eines Objekts zu ändern, müssen wir ihm einen neuen Wert zuweisen und die Änderungen festschreiben, um die Änderung dauerhaft zu machen.

Lassen Sie uns ein Objekt aus der Tabelle mit der Primärschlüssel-ID in unserer Customers-Tabelle mit der ID = 2 abrufen. Wir können die Methode get () der Sitzung wie folgt verwenden:

x = session.query(Customers).get(2)

Wir können den Inhalt des ausgewählten Objekts mit dem unten angegebenen Code anzeigen -

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Aus unserer Kundentabelle sollte folgende Ausgabe angezeigt werden -

Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]

Jetzt müssen wir das Adressfeld aktualisieren, indem wir einen neuen Wert wie unten angegeben zuweisen -

x.address = 'Banjara Hills Secunderabad'
session.commit()

Die Änderung wird dauerhaft in der Datenbank angezeigt. Jetzt holen wir das Objekt, das der ersten Zeile in der Tabelle entspricht, mitfirst() method wie folgt -

x = session.query(Customers).first()

Dies wird nach folgendem SQL-Ausdruck ausgeführt:

SELECT customers.id 
AS customers_id, customers.name 
AS customers_name, customers.address 
AS customers_address, customers.email 
AS customers_email
FROM customers
LIMIT ? OFFSET ?

Die gebundenen Parameter sind LIMIT = 1 bzw. OFFSET = 0, was bedeutet, dass die erste Zeile ausgewählt wird.

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Die Ausgabe für den obigen Code, der die erste Zeile anzeigt, lautet nun wie folgt:

Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]

Ändern Sie nun das Namensattribut und zeigen Sie den Inhalt mit dem folgenden Code an:

x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Die Ausgabe des obigen Codes ist -

Name: Ravi Shrivastava Address: Station Road Nanded Email: [email protected]

Obwohl die Änderung angezeigt wird, wird sie nicht festgeschrieben. Sie können die frühere dauerhafte Position mithilfe von beibehaltenrollback() method mit dem Code unten.

session.rollback()

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Der ursprüngliche Inhalt des ersten Datensatzes wird angezeigt.

Für Massenaktualisierungen verwenden wir die update () -Methode des Query-Objekts. Lassen Sie uns versuchen, ein Präfix anzugeben: "Mr." in jeder Zeile zu benennen (außer ID = 2). Die entsprechende update () - Anweisung lautet wie folgt:

session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)

The update() method requires two parameters as follows −

  • Ein Wörterbuch mit Schlüsselwerten, wobei der Schlüssel das zu aktualisierende Attribut und der Wert der neue Inhalt des Attributs ist.

  • Attribut synchronize_session, das die Strategie zum Aktualisieren von Attributen in der Sitzung erwähnt. Gültige Werte sind false: Wenn die Sitzung nicht synchronisiert werden soll, führt fetch: vor der Aktualisierung eine Auswahlabfrage durch, um Objekte zu finden, die mit der Aktualisierungsabfrage übereinstimmen. und bewerten: Bewerten Sie die Kriterien für Objekte in der Sitzung.

Bei drei von vier Zeilen in der Tabelle wird dem Namen "Mr." vorangestellt. Die Änderungen werden jedoch nicht festgeschrieben und werden daher nicht in der Tabellenansicht von SQLiteStudio wiedergegeben. Es wird nur aktualisiert, wenn wir die Sitzung festschreiben.