Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
109 changes: 63 additions & 46 deletions recursos/leccion2/mysql/sistema/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
"""
Programa para realizar operaciones a base de datos MySQL
"""
"""Programa para realizar operaciones a base de datos MySQL"""

import logging
from settings import (
Expand Down Expand Up @@ -62,17 +60,17 @@ def crear_conexion(servidor, puerto, usuario, contrasena, bd):
database=credenciales["database"],
)
logging.info(
f"¡Conexión a la base de datos '{credenciales['database']}' fue exitosa!\n"
f"¡Conexión a la base de datos '{credenciales['database']}' fue exitosa!\n"
)
except Error as err:
if err.args[0] == DBACCESS_DENIED_ERROR:
logging.error(
"\x1b[1;31mERROR: ¡Algo está mal con su nombre de usuario o contraseña!"
)
elif err.args[0] == BAD_DB_ERROR:
logging.error("\x1b[1;31mERROR: ¡La base de datos no existe!")
logging.error("\x1b[1;31m❌ ERROR: ¡La base de datos no existe!")
else:
logging.error(f"\x1b[1;31mERROR: ¡Se produjo lo siguiente: '{err}'")
logging.error(f"\x1b[1;31m❌ ERROR: Se produjo lo siguiente: '{err}'")
return conexion_bd


Expand All @@ -88,13 +86,13 @@ def crear_base_datos(conexion_bd, create_database_sql, bd):
# Crear un objeto cursor para ejecutar script SQL
cursor = conexion_bd.cursor()
try:
# Insertar una base de datos en el servidor MySQL
# Crear una base de datos en el servidor MySQL
cursor.execute(create_database_sql, bd)
logging.info(f"¡Creación exitosa de la base de datos '{bd}'!\n")
logging.info(f"¡Creación exitosa de la base de datos '{bd}'!\n")
except ProgrammingError as e:
logging.error(f"ERROR: ¡Se produjo una falla de programación: '{e}'!")
logging.error(f"ERROR: ¡Se produjo una falla de programación: '{e}'!")
except OperationalError as e:
logging.error(f"ERROR: Se produjo lo siguiente: '{e}'")
logging.error(f"ERROR: Se produjo lo siguiente: '{e}'")
return conexion_bd


Expand All @@ -110,19 +108,21 @@ def crear_tablas(conexion_bd, create_table_sql):
cursor = conexion_bd.cursor()
# Crear la tabla(s) si no existe
cursor.execute(create_table_sql)
# Confirmar la creación de la tabla
# Hacer persistentes los cambios en la base de datos
conexion_bd.commit()
logging.info(
f"¡Fueron creado(s) {cursor.rowcount} tabla(s) correctamente en la base de datos!\n"
f"¡Fueron creado(s) {cursor.rowcount} tabla(s) correctamente en la base de datos!\n"
)
# Cerrar el cursor
cursor.close()
except Error as error:
logging.error(f"¡Fallo la creación de tabla(s) en la base de datos!: {error}")
logging.error(
f"❌ ERROR: ¡Fallo la creación de tabla(s) en la base de datos!: {error}"
)


def insertar_registro(conexion_bd, insert_values, insert_sql):
"""Inserción de registro de la tabla
"""Función para la inserción de registro de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos MySQL
Expand All @@ -132,34 +132,32 @@ def insertar_registro(conexion_bd, insert_values, insert_sql):
try:
# Crear un objeto cursor para ejecutar script SQL
cursor = conexion_bd.cursor()
# Confirmar la creación de la tabla
conexion_bd.commit()
# Insertar nuevos registros en la tabla
cursor.executemany(insert_sql, insert_values)
# Confirmar la inserción de los registros
conexion_bd.commit()
logging.info(
f"¡Fueron insertado(s) {cursor.rowcount} registro(s) correctamente en la tabla!\n"
f"¡Fueron insertado(s) {cursor.rowcount} registro(s) correctamente en la tabla!\n"
)
# Insertar un nuevo registro en la tabla
cursor.execute(
insert_sql, (4, "Liliana", "Andradez", "3105", "+58-414-6782473")
)
# Confirmar la inserción del registro
# Hacer persistentes los cambios en la base de datos
conexion_bd.commit()
logging.info(
f"¡Fueron insertado(s) {cursor.rowcount} registro(s) correctamente en la tabla!\n"
f"¡Fueron insertado(s) {cursor.rowcount} registro(s) correctamente en la tabla!"
)
# Cerrar el cursor
cursor.close()
except IntegrityError as error:
logging.error(f"¡Registro duplicado por clave primaria!: {error}")
logging.error(f"❌ ERROR: ¡Registro duplicado por clave primaria!: {error}")
except Error as error:
logging.error(f"¡Fallo la inserción de registro(s) en la tabla!: {error}")
logging.error(
f"❌ ERROR: ¡Fallo la inserción de registro(s) en la tabla!: {error}"
)


def consultar_registro(conexion_bd, select_sql):
"""Consulta de registro(s) de la tabla
"""Función para la consulta de registro(s) de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos MySQL
Expand All @@ -173,8 +171,8 @@ def consultar_registro(conexion_bd, select_sql):
# Recuperar los registros de la consulta
registros = cursor.fetchall()
# Mostrar los registros de la tabla
print(f"Total de filas son: {len(registros)} \n")
print("Mostrar cada fila: \n")
print(f"\n📜 Total de filas son: {len(registros)} \n")
print("📜 Mostrar cada fila: \n")
for fila in registros:
print(f"\tId: {fila[0]}")
print(f"\tNombre: {fila[1]} {fila[2]}")
Expand All @@ -183,35 +181,39 @@ def consultar_registro(conexion_bd, select_sql):
# Cerrar el cursor
cursor.close()
except Error as error:
logging.error(f"¡Fallo la consulta de registro(s) en la tabla!: {error}")
logging.error(
f"❌ ERROR: ¡Fallo la consulta de registro(s) en la tabla!: {error}"
)


def actualizar_registro(conexion_bd, update_values, update_sql):
"""Actualización de registro de la tabla
"""Función para la actualización de registro de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos MySQL
update_values (list): Lista de filas a actualizar
update_sql (str): _description_
update_sql (str): Script UPDATE SQL a usar al actualizar datos
"""
try:
# Crear un objeto cursor para ejecutar script SQL
cursor = conexion_bd.cursor()
# Actualizar nuevos registros en la tabla
cursor.executemany(update_sql, update_values)
# Guardar los cambios en la base de datos
# Hacer persistentes los cambios en la base de datos
conexion_bd.commit()
logging.info(
f"¡Fueron actualizado(s) {cursor.rowcount} registro(s) correctamente en la tabla!\n"
f"¡Fueron actualizado(s) {cursor.rowcount} registro(s) correctamente en la tabla!\n"
)
# Cerrar el cursor
cursor.close()
except Error as error:
logging.error(f"¡Fallo la actualización de registro(s) en la tabla!: {error}")
logging.error(
f"❌ ERROR: ¡Fallo la actualización de registro(s) en la tabla!: {error}"
)


def eliminar_registro(conexion_bd, delete_sql):
"""Eliminación de registro de la tabla
"""Función para la eliminación de registro de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos MySQL
Expand All @@ -222,23 +224,38 @@ def eliminar_registro(conexion_bd, delete_sql):
cursor = conexion_bd.cursor()
# Eliminar un fila de registro simple
cursor.execute(delete_sql)
# Guardar los cambios en la base de datos
# Hacer persistentes los cambios en la base de datos
conexion_bd.commit()
logging.info("¡Registro eliminado correctamente!\n")
logging.info("¡Registro eliminado correctamente!\n")
# Cerrar el cursor
cursor.close()
except Error as error:
logging.error(f"¡Fallo la eliminación de registro(s) en la tabla!: {error}")
logging.error(
f"❌ ERROR: ¡Fallo la eliminación de registro(s) en la tabla!: {error}"
)


if __name__ == "__main__":
# Crear conexión con un servidor MySQL
conexion = crear_conexion(HOST, PORT, USER, PASSW, DB)
# Crear la base de datos
# crear_base_datos(conexion, CREATE_DATABASE_SQL, DB)
# Crear la tabla dentro de la base de datos
crear_tablas(conexion, CREATE_TABLE_SQL)
insertar_registro(conexion, INSERT_MULTIPLE_COLUMNS, INSERT_SQL_SCRIPTS)
consultar_registro(conexion, SELECT_SQL_SCRIPTS)
actualizar_registro(conexion, UPDATE_MULTIPLE_COLUMNS, UPDATE_SQL_SCRIPTS)
eliminar_registro(conexion, DELETE_SQL_SCRIPTS)
conexion = None
try:
# Crear conexión al servidor MySQL
conexion = crear_conexion(HOST, PORT, USER, PASSW, DB)
# Crear la base de datos
# crear_base_datos(conexion, CREATE_DATABASE_SQL, DB)
# Crear la tabla dentro de la base de datos
crear_tablas(conexion, CREATE_TABLE_SQL)
insertar_registro(conexion, INSERT_MULTIPLE_COLUMNS, INSERT_SQL_SCRIPTS)
consultar_registro(conexion, SELECT_SQL_SCRIPTS)
actualizar_registro(conexion, UPDATE_MULTIPLE_COLUMNS, UPDATE_SQL_SCRIPTS)
eliminar_registro(conexion, DELETE_SQL_SCRIPTS)
except Error as e:
logging.error(
f"❌ ERROR: ¡Se produjo un falla al establecer la conexión a la base de datos '{DB}': '{e}'!"
)
finally:
if conexion:
# Cerrar la conexión a la base de datos
conexion.close()
logging.info(
f"✅ ¡La conexión PostgreSQL a la base de datos '{DB}' fue cerrada!"
)
16 changes: 8 additions & 8 deletions recursos/leccion2/postgresql/sistema/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
UPDATE_SQL_SCRIPTS,
DELETE_SQL_SCRIPTS,
)
from psycopg2.errors import Error, DatabaseError, OperationalError, ProgrammingError
from psycopg2 import connect
from psycopg2.errors import Error, DatabaseError, OperationalError, ProgrammingError

logging.basicConfig(level=logging.INFO)

Expand Down Expand Up @@ -119,7 +119,7 @@ def insertar_registro(conexion_bd, insert_values, insert_sql):
"""Función para la inserción de registro de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos SQLite
conexion_bd (Connection): Representación conexión a la base de datos PostgreSQL
insert_values (list): Lista de filas a ingresar
insert_sql (str): Script INSERT SQL a usar al ingresar datos
"""
Expand All @@ -133,7 +133,7 @@ def insertar_registro(conexion_bd, insert_values, insert_sql):
)
# Insertar un nuevo registro en la tabla
cursor.execute(
INSERT_SQL_SCRIPTS, (4, "Liliana", "Andradez", "3105", "+58-414-6782473")
insert_sql, (4, "Liliana", "Andradez", "3105", "+58-414-6782473")
)
# Hacer persistentes los cambios en la base de datos
conexion_bd.commit()
Expand All @@ -152,7 +152,7 @@ def consultar_registro(conexion_bd, select_sql):
"""Función para la consulta de registro(s) de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos SQLite
conexion_bd (Connection): Representación conexión a la base de datos PostgreSQL
select_sql (str): Script SELECT SQL a usar al consultar datos
"""
try:
Expand Down Expand Up @@ -182,7 +182,7 @@ def actualizar_registro(conexion_bd, update_values, update_sql):
"""Función para la actualización de registro de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos SQLite
conexion_bd (Connection): Representación conexión a la base de datos PostgreSQL
update_values (list): Lista de filas a actualizar
update_sql (str): Script UPDATE SQL a usar al actualizar datos
"""
Expand All @@ -208,7 +208,7 @@ def eliminar_registro(conexion_bd, delete_sql):
"""Función para la eliminación de registro de la tabla

Args:
conexion_bd (Connection): Representación conexión a la base de datos SQLite
conexion_bd (Connection): Representación conexión a la base de datos PostgreSQL
delete_sql (str): Script DELETE SQL a usar al eliminar datos
"""
try:
Expand Down Expand Up @@ -240,12 +240,12 @@ def eliminar_registro(conexion_bd, delete_sql):
eliminar_registro(conexion, DELETE_SQL_SCRIPTS)
except Error as e:
logging.error(
f"❌ ERROR: ¡Se produjo un falla al establecer la conexión a la base de datos '{DB_FILE}': '{e}'!"
f"❌ ERROR: ¡Se produjo un falla al establecer la conexión a la base de datos '{DB}': '{e}'!"
)
finally:
if conexion:
# Cerrar la conexión a la base de datos
conexion.close()
logging.info(
f"✅ ¡La conexión SQLite a la base de datos '{DB_FILE}' fue cerrada!"
f"✅ ¡La conexión PostgreSQL a la base de datos '{DB}' fue cerrada!"
)
2 changes: 1 addition & 1 deletion source/leccion2/mysql.rst
Original file line number Diff line number Diff line change
Expand Up @@ -559,7 +559,7 @@ Módulo principal del programa.
.. literalinclude:: ../../recursos/leccion2/mysql/sistema/main.py
:language: python
:linenos:
:lines: 1-244
:lines: 1-261

*Archivo* :file:`docker-compose.yml`

Expand Down