Utilizzo dell'espressione UPDATE
Il update() Il metodo sull'oggetto tabella di destinazione costruisce un'espressione SQL UPDATE equivalente.
table.update().where(conditions).values(SET expressions)
Il values()Il metodo sull'oggetto di aggiornamento risultante viene utilizzato per specificare le condizioni SET di UPDATE. Se lasciato come Nessuno, le condizioni SET sono determinate da quei parametri passati all'istruzione durante l'esecuzione e / o la compilazione dell'istruzione.
La clausola where è un'espressione facoltativa che descrive la condizione WHERE dell'istruzione UPDATE.
Il seguente frammento di codice cambia il valore della colonna "lastname" da "Khanna" a "Kapoor" nella tabella degli studenti -
stmt = students.update().where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')
L'oggetto stmt è un oggetto di aggiornamento che si traduce in -
'UPDATE students SET lastname = :lastname WHERE students.lastname = :lastname_1'
Il parametro associato lastname_1 verrà sostituito quando execute()viene invocato il metodo. Il codice di aggiornamento completo è fornito di seguito:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
students = Table(
'students',
meta,
Column('id', Integer, primary_key = True),
Column('name', String),
Column('lastname', String),
)
conn = engine.connect()
stmt=students.update().where(students.c.lastname=='Khanna').values(lastname='Kapoor')
conn.execute(stmt)
s = students.select()
conn.execute(s).fetchall()
Il codice sopra mostra il seguente output con la seconda riga che mostra l'effetto dell'operazione di aggiornamento come nello screenshot fornito -
[
(1, 'Ravi', 'Kapoor'),
(2, 'Rajiv', 'Kapoor'),
(3, 'Komal', 'Bhandari'),
(4, 'Abdul', 'Sattar'),
(5, 'Priya', 'Rajhans')
]
Si noti che funzionalità simili possono essere ottenute anche utilizzando update() funzione nel modulo sqlalchemy.sql.expression come mostrato di seguito -
from sqlalchemy.sql.expression import update
stmt = update(students).where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')