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.