SQLAlchemy ORM - Atualizando objetos
Neste capítulo, veremos como modificar ou atualizar a tabela com os valores desejados.
Para modificar os dados de um determinado atributo de qualquer objeto, temos que atribuir um novo valor a ele e confirmar as alterações para tornar a alteração persistente.
Vamos buscar um objeto da tabela cujo identificador de chave primária, em nossa tabela Clientes com ID = 2. Podemos usar o método get () de sessão da seguinte forma -
x = session.query(Customers).get(2)
Podemos exibir o conteúdo do objeto selecionado com o código fornecido abaixo -
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
De nossa tabela de clientes, a seguinte saída deve ser exibida -
Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]
Agora precisamos atualizar o campo Endereço atribuindo um novo valor conforme fornecido abaixo -
x.address = 'Banjara Hills Secunderabad'
session.commit()
A mudança será refletida persistentemente no banco de dados. Agora vamos buscar o objeto correspondente à primeira linha da tabela usandofirst() method como segue -
x = session.query(Customers).first()
Isso executará a seguinte expressão 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 ?
Os parâmetros limitados serão LIMIT = 1 e OFFSET = 0 respectivamente, o que significa que a primeira linha será selecionada.
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
Agora, a saída para o código acima exibindo a primeira linha é a seguinte -
Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]
Agora altere o atributo de nome e exiba o conteúdo usando o código abaixo -
x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
A saída do código acima é -
Name: Ravi Shrivastava Address: Station Road Nanded Email: [email protected]
Mesmo que a alteração seja exibida, ela não foi confirmada. Você pode manter a posição persistente anterior usandorollback() method com o código abaixo.
session.rollback()
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
O conteúdo original do primeiro registro será exibido.
Para atualizações em massa, devemos usar o método update () do objeto Query. Vamos tentar dar um prefixo, 'Sr.' para nomear em cada linha (exceto ID = 2). A instrução update () correspondente é a seguinte -
session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)
The update() method requires two parameters as follows −
Um dicionário de valores-chave com a chave sendo o atributo a ser atualizado e o valor sendo o novo conteúdo do atributo.
O atributo synchronize_session menciona a estratégia de atualização dos atributos na sessão. Os valores válidos são falsos: para não sincronizar a sessão, fetch: executa uma consulta de seleção antes da atualização para encontrar objetos que são correspondidos pela consulta de atualização; e avaliar: avaliar critérios em objetos na sessão.
Três das 4 linhas da tabela terão o nome prefixado com 'Sr.' No entanto, as alterações não são confirmadas e, portanto, não serão refletidas na visualização de tabela do SQLiteStudio. Ele será atualizado apenas quando confirmarmos a sessão.