En la clase pasada vimos como insertar valores dentro de una tabla, para lo cual creamos la función execute_query_insert
:
# Primero importamos los paquetes que utilizaremos
import psycopg2
import pandas as pd
def execute_query_insert(query_insert, values_tupla):
try:
# Creamos la conexion
conexion = psycopg2.connect(
user='postgres',
password='31416',
host='127.0.0.1',
port='5432',
database='CursoPostgres')
# Creamos un administrador de contexto para la conexion
# con la base de datos
with conexion:
# Creamos otro administrador para el cursor
with conexion.cursor() as cursor:
# Aquí será donde utilizaremos los parámetros de la función
query = query_insert
values = values_tupla
cursor.execute(query, values)
# Mostramos un mensaje de que la inserción ha sido exitosa
print("Inserción exitosa")
# Arrojamos un mensaje en caso de error
except Exception as e:
print(f'Ocurrio un error: {e}')
# Finalmente cerramos la conexion y el cursor
finally:
conexion.close()
Ahora bien, comenzaremos esta clase viendo cómo actualizar registros en una tabla.
Para esto veamos primero los registros de la tabla curso_python
valiéndonos de la función execute_query()
que creamos antes:
execute_query('SELECT * FROM curso_python')
0 1 2 3 4 0 1 Luis Apáez 24 CDMX 1 2 Pedri López 14 Guadalajara 2 4 Fer Luna 19 CDMX 3 11 Erick García 19 CDMX 4 12 Carlos López 24 Guadalajara 5 13 Ney López 32 Tijuana 6 14 Naye López 21 CDMX 7 15 Alex López 20 Tula 8 16 Iván López 16 Los Mochis 9 3 Juan Apáez 24 Toluca
Ahora bien, actualicemos el nombre de Luis
de la tercer fila y coloquemos en su lugar el nombre Juan
, para ello emplearemos la misma función para las inserciones
execute_query_insert('UPDATE curso_python SET nombre = %s WHERE id_curso=3', ('Juan',))
Inserción exitosa
donde es preciso recordar que al momento de escribir el código sql de los valores que deseamos o insertar o actualizar, colocamos en su lugar %s
que actúa como una "variable", la cual después toma el valor que ingresamos en la tupla correspondiente al segundo parámetro de la función execute_query_insert
. Podemos modificar un poco nuestra función para que diga "actualización exitosa" en vez de "inserción existosa", para ello
# Cambiamos el nombre de la función
def execute_query_insert_update(query_insert, values_tupla):
try:
# Creamos la conexion
conexion = psycopg2.connect(
user='postgres',
password='31416',
host='127.0.0.1',
port='5432',
database='CursoPostgres')
# Creamos un administrador de contexto para la conexion
# con la base de datos
with conexion:
# Creamos otro administrador para el cursor
with conexion.cursor() as cursor:
# Aquí será donde utilizaremos los parámetros de la función
query = query_insert
values = values_tupla
cursor.execute(query, values)
# Mostramos un mensaje de que la inserción ha sido exitosa
# Dividimos la cadena de texto guardada en query
cadena_list = query.split(" ")
# Dependiendo de la primer palabra de la sentencia sql
# imprimiremos inserción o actualización exitosa
if cadena_list[0].upper() == "INSERT":
print("Inserción exitosa")
elif cadena_list[0].upper() == "UPDATE":
print("Actualización exitosa")
else:
print("Error!")
# Arrojamos un mensaje en caso de error
except Exception as e:
print(f'Ocurrio un error: {e}')
# Finalmente cerramos la conexion y el cursor
finally:
conexion.close()
Probamos nuestra nueva función, donde actualizaremos el apellido de Alex
correspondiente al id igual a 15
execute_query_insert_update('UPDATE curso_python SET apellido = %s WHERE id_curso=15', ('Santander',))
Actualización exitosa
vemos los cambios reflejados
execute_query('SELECT * FROM curso_python WHERE id_curso = 15')
0 1 2 3 4 0 15 Alex Santander 20 Tula
Para eliminar una fila dentro de nuestra tabla podemos ocupar nuevamente la función que creamos anteriormente. El único cambio que efectuaremos será sobre el mensaje de salida el cual, nos gustaría, que fuera "Eliminación exitosa" para el caso en que eliminamos una fila. De tal manera
# Cambiamos el nombre de la función
def execute_query_dml(query_insert, values_tupla):
try:
# Creamos la conexion
conexion = psycopg2.connect(
user='postgres',
password='31416',
host='127.0.0.1',
port='5432',
database='CursoPostgres')
# Creamos un administrador de contexto para la conexion
# con la base de datos
with conexion:
# Creamos otro administrador para el cursor
with conexion.cursor() as cursor:
# Aquí será donde utilizaremos los parámetros de la función
query = query_insert
values = values_tupla
cursor.execute(query, values)
# Mostramos un mensaje de que la inserción ha sido exitosa
# Dividimos la cadena de texto guardada en query
cadena_list = query.split(" ")
# Dependiendo de la primer palabra de la sentencia sql
# imprimiremos inserción o actualización exitosa
if cadena_list[0].upper() == "INSERT":
print("Inserción exitosa")
elif cadena_list[0].upper() == "UPDATE":
print("Actualización exitosa")
elif cadena_list[0].upper() == "DELETE":
print("Eliminación exitosa")
else:
print("Error!")
# Arrojamos un mensaje en caso de error
except Exception as e:
print(f'Ocurrio un error: {e}')
# Finalmente cerramos la conexion y el cursor
finally:
conexion.close()
donde hemos llamada a la última versión de nuestra función como execute_query_dml
refiriéndonos al lenguaje DML (Data Manipulation Language) de sql. Probamos nuestra función eliminando la información de la fila 11 de la tabla curso_python
:
execute_query_dml('DELETE FROM curso_python WHERE id_curso = %s', (11,))
Eliminación exitosa