SQLAlchemy ORM - Aggiornamento di oggetti

In questo capitolo vedremo come modificare o aggiornare la tabella con i valori desiderati.

Per modificare i dati di un certo attributo di qualsiasi oggetto, dobbiamo assegnargli un nuovo valore e confermare le modifiche per rendere la modifica persistente.

Recuperiamo un oggetto dalla tabella il cui identificatore di chiave primaria, nella nostra tabella Clienti con ID = 2. Possiamo usare il metodo di sessione get () come segue:

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

Possiamo visualizzare il contenuto dell'oggetto selezionato con il codice indicato di seguito -

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

Dalla nostra tabella clienti, dovrebbe essere visualizzato il seguente output:

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

Ora dobbiamo aggiornare il campo Indirizzo assegnando un nuovo valore come indicato di seguito -

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

La modifica si rifletterà in modo persistente nel database. Ora recuperiamo l'oggetto corrispondente alla prima riga della tabella utilizzandofirst() method come segue -

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

Questo eseguirà la seguente espressione SQL:

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 ?

I parametri vincolati saranno rispettivamente LIMIT = 1 e OFFSET = 0, il che significa che verrà selezionata la prima riga.

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

Ora, l'output per il codice sopra che mostra la prima riga è il seguente:

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

Ora cambia l'attributo del nome e visualizza il contenuto utilizzando il codice seguente:

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

L'output del codice sopra è -

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

Anche se la modifica viene visualizzata, non viene salvata. È possibile mantenere la precedente posizione persistente utilizzandorollback() method con il codice sottostante.

session.rollback()

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

Verrà visualizzato il contenuto originale del primo record.

Per gli aggiornamenti in blocco, utilizzeremo il metodo update () dell'oggetto Query. Proviamo a dare un prefisso, "Mr." da nominare in ogni riga (tranne ID = 2). L'istruzione update () corrispondente è la seguente:

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

The update() method requires two parameters as follows −

  • Un dizionario di valori-chiave in cui la chiave è l'attributo da aggiornare e il valore è il nuovo contenuto dell'attributo.

  • Attributo synchronize_session che menziona la strategia per aggiornare gli attributi nella sessione. I valori validi sono falsi: per non sincronizzare la sessione, fetch: esegue una query di selezione prima dell'aggiornamento per trovare gli oggetti che corrispondono alla query di aggiornamento; e valuta: valuta i criteri sugli oggetti nella sessione.

Tre righe su 4 nella tabella avranno il prefisso "Mr." Tuttavia, le modifiche non vengono salvate e quindi non si rifletteranno nella visualizzazione tabella di SQLiteStudio. Verrà aggiornato solo quando eseguiremo il commit della sessione.