Usando la expresión UPDATE
los update() El método en el objeto de la tabla de destino construye una expresión SQL UPDATE equivalente.
table.update().where(conditions).values(SET expressions)
los values()El método en el objeto de actualización resultante se utiliza para especificar las condiciones SET de UPDATE. Si se deja como Ninguno, las condiciones SET se determinan a partir de los parámetros pasados a la declaración durante la ejecución y / o compilación de la declaración.
La cláusula where es una expresión opcional que describe la condición WHERE de la instrucción UPDATE.
El siguiente fragmento de código cambia el valor de la columna 'apellido' de 'Khanna' a 'Kapoor' en la tabla de estudiantes:
stmt = students.update().where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')
El objeto stmt es un objeto de actualización que se traduce en:
'UPDATE students SET lastname = :lastname WHERE students.lastname = :lastname_1'
El parámetro vinculado lastname_1 será sustituido cuando execute()se invoca el método. El código de actualización completo se proporciona a continuación:
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()
El código anterior muestra el siguiente resultado con la segunda fila que muestra el efecto de la operación de actualización como en la captura de pantalla dada:
[
(1, 'Ravi', 'Kapoor'),
(2, 'Rajiv', 'Kapoor'),
(3, 'Komal', 'Bhandari'),
(4, 'Abdul', 'Sattar'),
(5, 'Priya', 'Rajhans')
]
Tenga en cuenta que también se puede lograr una funcionalidad similar utilizando update() función en el módulo sqlalchemy.sql.expression como se muestra a continuación -
from sqlalchemy.sql.expression import update
stmt = update(students).where(students.c.lastname == 'Khanna').values(lastname = 'Kapoor')