Núcleo de SQLAlchemy: declaración de actualización

En este artículo, vamos a ver cómo usar la declaración UPDATE en SQLAlchemy contra una base de datos PostgreSQL en Python.

Creación de tabla para demostración.

Importe las funciones necesarias del paquete SQLAlchemy. Establezca una conexión con la base de datos PostgreSQL usando la función create_engine() como se muestra a continuación, cree una tabla llamada libros con las columnas book_id y book_price. Inserte un registro en las tablas usando la función insert() y valores() como se muestra.

Python3

# import necessary packages
from sqlalchemy.engine import result
import sqlalchemy
from sqlalchemy import create_engine, MetaData,
Table, Column, Numeric, Integer, VARCHAR, update
 
# establish connections
engine = create_engine(
    "database+dialect://username:password0@host:port/databasename")
 
# initialize the Metadata Object
meta = MetaData(bind=engine)
MetaData.reflect(meta)
 
# create a table schema
books = Table(
    'books', meta,
    Column('book_id', Integer, primary_key=True),
    Column('book_price', Numeric),
    Column('genre', VARCHAR),
    Column('book_name', VARCHAR)
)
 
meta.create_all(engine)
 
# insert records into the table
statement1 = books.insert().values(book_id=1,
                                   book_price=12.2,
                                   genre='fiction',
                                   book_name='Old age')
statement2 = books.insert().values(book_id=2,
                                   book_price=13.2,
                                   genre='non-fiction',
                                   book_name='Saturn rings')
statement3 = books.insert().values(book_id=3,
                                   book_price=121.6,
                                   genre='fiction',
                                   book_name='Supernova')
statement4 = books.insert().values(book_id=4,
                                   book_price=100,
                                   genre='non-fiction',
                                   book_name='History of the world')
statement5 = books.insert().values(book_id=5,
                                   book_price=1112.2,
                                   genre='fiction',
                                   book_name='Sun city')
 
# execute the insert records statement
engine.execute(statement1)
engine.execute(statement2)
engine.execute(statement3)
engine.execute(statement4)
engine.execute(statement5)

Producción:

tabla de muestra

Implementando una consulta para actualizar elementos de tabla en SQLAlchemy

Ejemplo 1: consulta para actualizar la tabla 

La actualización de los elementos de la tabla tiene un procedimiento ligeramente diferente al de una consulta SQL convencional que se muestra a continuación

from sqlalchemy import update
upd = update(tablename)
val = upd.values({"column_name":"value"})
cond = val.where(tablename.c.column_name == value)

Obtenga la tabla de libros del objeto Metadata inicializado mientras se conecta a la base de datos. Pase la consulta de actualización a la función execute() y obtenga todos los resultados usando la función fetchall(). Use un bucle for para iterar a través de los resultados. 

La consulta SQLAlchemy que se muestra en el siguiente código actualiza el nombre del libro de la fila 3 como «2022 futuro por delante». Luego, podemos escribir una consulta SQL convencional y usar fetchall() para imprimir los resultados y verificar si la tabla se actualizó correctamente.

Python3

# Get the `books` table from the Metadata object
BOOKS = meta.tables['books']
 
# update
u = update(BOOKS)
u = u.values({"book_name": "2022 future ahead"})
u = u.where(BOOKS.c.book_id == 3)
engine.execute(u)
 
 
# write the SQL query inside the
# text() block to fetch all records
sql = text("SELECT * from BOOKS")
 
# Fetch all the records
result = engine.execute(sql).fetchall()
 
# View the records
for record in result:
    print("\n", record)

Producción:

El resultado de la consulta de actualización.

Ejemplo 2: Consulta para actualizar una tabla basada en el valor

Veamos otro ejemplo relacionado con la consulta de actualización. La consulta de actualización que se muestra a continuación actualiza el género de ficción como «ciencia ficción».

Tablename.update().where(Tablename.c.column_name == ‘value’).values(column_name = ‘value’)

Python3

# Get the `books` table from the Metadata object
BOOKS = meta.tables['books']
 
# update
stmt = BOOKS.update().where(BOOKS.c.genre == 'non-fiction'
                           ).values(genre = 'sci-fi')
engine.execute(stmt)
 
# write the SQL query inside the
# text() block to fetch all records
sql = text("SELECT * from BOOKS")
 
# Fetch all the records
result = engine.execute(sql).fetchall()
 
# View the records
for record in result:
    print("\n", record)

Producción:

El resultado de la consulta de actualización.

Ejemplo 3: consulta para actualizar una tabla basada en la condición

La siguiente consulta actualiza book_price agregando 50 dólares a los libros que suman menos o igual a 100. 

Python3

# Get the `books` table from the Metadata object
BOOKS = meta.tables['books']
 
# update
stmt = BOOKS.update().where(BOOKS.c.book_price <= 100
                           ).values(book_price= BOOKS.c.book_price + 50)
engine.execute(stmt)
 
# write the SQL query inside the
# text() block to fetch all records
sql = text("SELECT * from BOOKS")
 
# Fetch all the records
result = engine.execute(sql).fetchall()
 
# View the records
for record in result:
    print("\n", record)

Producción:

El resultado de la consulta de actualización

Publicación traducida automáticamente

Artículo escrito por jssuriyakumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *