0% encontró este documento útil (0 votos)
8 vistas

Guia SQL - Python

La guía enseña a manejar bases de datos en Python utilizando MySQL, comenzando con la instalación de MySQL y WorkBench, y la creación de esquemas y tablas. Se abordan operaciones de inserción, actualización y eliminación de datos, así como la implementación de un sistema de clases para gestionar personas y pedidos. Además, se introduce el concepto de pool de conexiones para optimizar el rendimiento al interactuar con la base de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas

Guia SQL - Python

La guía enseña a manejar bases de datos en Python utilizando MySQL, comenzando con la instalación de MySQL y WorkBench, y la creación de esquemas y tablas. Se abordan operaciones de inserción, actualización y eliminación de datos, así como la implementación de un sistema de clases para gestionar personas y pedidos. Además, se introduce el concepto de pool de conexiones para optimizar el rendimiento al interactuar con la base de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Bases de datos con Python: en esta guía estaremos aprendiendo a el manejo de bases

de datos con Python, partiendo de los conocimientos que ya tenemos en MySQL y WorkBench
Para iniciar debemos instalar MySQL y WorkBench, tal cual como se vio en el curso de SQL.
Vamos a repasar la creación de un nuevo Schema o BD con nombre personas_db y la creación de
una tabla con nombre personas con los campos o atributos id_persona, nombre, apellido, teléfono
y correo.

Recordemos qué es una clave primaria y modifica la tabla anterior y configura a la columna
id_persona como clave primaria y autoincremental, y marca al campo correo como único. Ahora
creemos otras dos tablas una llamada pedidos con el campo id_pedido como primary key - AI.
Agrega el campo id_persona para configurarlo como llave foránea en relación con la tabla personas.
Además, agrega los campos cantidad, descripción_producto y fecha_pedido.

Crea otra tabla llamada compras agregar id_compra como PK – IA. Agrega el campo id_persona
para configurarlo como llave foránea en relación con la tabla personas. Además, agrega los campos
total_pagado, metodo_pago. Procede a configurar las claves foráneas en las tablas pedidos y
compras. Luego agrega 3 registros a la tabla personas

Instalación librería MySQL en Python:


La instalación de la librería de MySQL se debe hacer en
cada proyecto de Python en el que deseemos utilizar
MySQL. Por lo procedemos a crear un nuevo proyecto
en PyCharm. Debemos asegurarnos de que esté
seleccionada la opción custom environment y virtual

Esto es porque cada proyecto trabaja en su propio


ambiente virtual y en cada proyecto se deben instalar las
librerías que necesita utilizar.

Luego debemos ir al icono “Terminal” ubicado en la parte inferior lateral


izquierda y escribimos la siguiente instrucción y al finalizar oprimir enter
En el proyecto procedemos a crear un nuevo archivo de Python e importamos de la librería que
acabamos de instalar a mysql.connector

Luego procedemos a crear un objeto que será de tipo mysql, con la siguiente información entre
parentesis

Luego procedemos a crear un objeto de tipo cursor para poder interactuar con la base de datos

Con este objeto y el método execute() ya podremos ejecutar consultas SQL

En el siguiente ejemplo se listan todos los registros de la tabla personas.


Como se puede ver en la imagen, dentro del método execute() se pone entre comillas la consulta
SQL. En mi caso, mi base de datos tiene una tabla llamada personas. El método fetchall() sirve para
extraer todas las filas que contenga el cursor, ya que el cursor almacena temporalmente la
información que retorna la consulta a mysql
 Ahora intenta llamar solo a nombre y apellido

Finalizar el cursor y la conexión a la base de datos: debemos finalizar el cursor invocando el método
close(), esto es considerado una buena práctica ya que previene errores en la administración de la
base de datos y posibles ataque de seguridad. También debemos finalizar la conexión a la bd usando
el objeto de tipo mysql y llamar al método close().

así liberamos a la base de datos ya que si la mantenemos abierta consumiríamos más recursos como
memoria ram y de igual forma consumiríamos más recursos del servidor. También puede generar
errores si otros programadores intentan acceder a la base de datos

Insertar datos desde Python: Para agregar valores lo haremos de la misma forma como se hace
en workbech, pero dentro de los paréntesis del método execute(). También debemos tener en
cuenta que al agregar valores que sean de tipo cadena, debemos usar comillas distintas a las
comillas donde estamos encerrando la sentencia SQL, ejemplo en la siguiente imagen. Luego
debemos usar el método commit() que es el que guardará de manera permanente la información
en la base de datos.
Otra forma de ingresar datos y la más recomendada es usando marcadores de posición %s los signos
de porcentaje y la letra s, actúan como un parámetro para recibir valores. Como se ve en la imagen
siguiente, almacenamos una sentencia SQL como cadena en una variable, en la consulta podemos
ver que los valores son marcadores de posición %s que actuarán como parámetros. En la línea 14
vemos que tenemos una tupla con datos, estos serán los valores que se pasarán a los marcadores
de posición en el mismo orden como están ubicados. Luego en la línea 15 vemos que mi_cursor
invoca al método execute y se le pasan dos parámetros, primero la sentencia que habíamos
almacenado como cadena en la variable sentencia_sql, como segundo parámetro se pasa a la tupla
que contiene los valores. En el ejemplo anterior le pasamos a execute() toda la sentencia incluyendo
los valores, esto podría provocar una vulnerabilidad en el sistema quedando expuesto a ataques
donde puedan robar, manipular o alterar información de la base de datos.

El método execute permite pasar 3 parámetro, el primero es obligatorio que es la sentencia sql, los
otros dos son opcionales. El segundo son los valores como vimos en el ejemplo anterior y solo recibe
como valores a listas, tuplas, o diccionarios. El tercer parámetro es multi=True o False, multi puede
ser igual a True o False, sirve para agregar varias consultas diferentes a la vez, en una sola cadena
de texto como primer parámetro, si queremos hacerlo, entonces multi de ser =True, como se ve en
la siguiente imagen

 Agrega un nuevo registro con tu nombre, apellido, teléfono y el correo


 Agrega un nuevo registro con nombre, apellido y correo, teléfono déjalo Null
Actualizar datos desde Python: Crea un nuevo archivo y configura la conexión a la base de datos
personas_db, hazlo sin ver el archivo anterior para que practiques la configuración. Igualmente,
práctica creando el objeto tipo mysql y el cursor

Para actualizar un registro de la bd usamos el comando UPDATE, igualmente podemos crear una
variable que contenga la cadena de texto con la sentencia SQL y una tupla con los valores, usando
los marcadores de posición para prevenir sql injection, en la siguiente imagen se actualiza un
registro, de manera específica se indica que sea un registro con id_persona = 15.
Esta parte es muy importante: si NO filtramos con WHERE a qué registro se le desea hacer la
actualización, entonces se entenderá que se quieren actualizar todos los registros de la tabla y al
tener un commit() los cambios en la base de datos no se puede deshacer.

Eliminar datos desde Python: Crea un nuevo archivo y configura la conexión a la base de datos
personas_db, hazlo sin ver el archivo anterior para que practiques la configuración. Igualmente,
práctica creando el objeto tipo mysql y el cursor

Para eliminar un registro de la bd usamos el comando DELETE, igualmente podemos crear una
variable con la sentencia sql y una tupla con los valores. Muy importante: filtrar con WHERE qué
registro se desea eliminar, sino se hace, se eliminarán todos los datos de la tabla al tener un
commit
Ejercicio de práctica: en el siguiente ejercicio usaremos programación orientada a objetos y bases
de atos con mysql.

Crea una clase llamada persona con los siguientes atributos, aplica encapsulamiento:

 Nombre (String)
 Apellido (String)
 Telefono (String)
 Correo (String)

Crea los siguientes métodos:

 Insertar_persona(conexion): debe agregar una persona a la base de datos. Debe crear un


cursor local de este método.
 Obtener_id_persona(conexión): debe retornar el id de una persona de la base de datos, el
usuario debe suministrar el correo para identificar el id de la persona.
Debe crear un cursor local de este método.
 Hacer_pedido(conexión): debe registrar un pedido en la base de datos, registrando la
relación entre el pedido y la persona, debes invocar al método obtener_id_persona.
Igualmente debe ingresar por consola los valores para cantidad y descripción del producto.
El campo fecha debe llenarse automáticamente con el método datetime.date.today()
 comprar(conexión): debe registrar una compra en la base de datos, registrando la relación
entre la compra y la persona, debes invocar al método obtener_id_persona.
Igualmente debe ingresar por consola los valores de total_pagado y método_pago

En el main crea la conexión a la base de datos.

Crea un menú con las siguientes opciones:

 Registrar persona: debe crear una instancia de la clase persona y luego invocar al método
insertar_persona
 Realizar pedido: debe invocar al método hacer_pedido
 Realizar compra: debe invocar al método comprar

Luego de finalizado el ejercicio realiza las siguientes consultas

o Agrega personas a la base de datos


o Agrega pedidos
o Agrega compras
o Consulta una persona cuántos pedidos ha realizado
o Consulta una persona cuántas compras ha realizado
o Consulta una persona cuántos pedidos y cuántas compras ha realizado

Crear un pool de conexiones: Cuando un programa necesita conectarse frecuentemente a una


base de datos, abrir y cerrar conexiones constantemente consume muchos recursos y afecta el
rendimiento. Un pool de conexiones resuelve este problema al reutilizar conexiones existentes en
lugar de crear nuevas cada vez. Si tenemos una aplicación con 1000 usuarios, pero supongamos que
normalmente están interactuando simultáneamente con la base de datos y haciendo consultas unos
50 usuarios. Un pool de 5 conexiones puede ser suficiente ya que una consulta puede ser resuelta
en 100ms o tal vez 500ms, esta velocidad depende de la arquitectura del servidor, de la estructura
de la base de datos y de la magnitud de la base de datos, es decir de la cantidad de registros que
contenga.

Ventajas de tener un pool de conexiones:

 Mejor rendimiento: Reduce el tiempo de espera al evitar la sobrecarga de abrir y cerrar


conexiones repetidamente.
 Mayor eficiencia: Permite manejar múltiples solicitudes de usuarios sin sobrecargar la base
de datos.
 Ahorro de recursos: Reduce el consumo de memoria y CPU, ya que las conexiones se
reutilizan.
 Evita errores de conexión: Previene problemas como "demasiadas conexiones abiertas" en
bases de datos con límites de conexiones activas.

Para configurar el pool partiremos de los conocimientos que tenemos para crear una conexión.

Empecemos importando los siguientes módulos y creando una clase llamada Conexión, con los
atributos de clase definidos como constantes con los valores que se ven en la siguiente imagen
Luego debemos crear un método de clase llamado obtener_pool(cls) donde

primero preguntamos con un if si el pool is None parar saber si ha sido creado el pool, si no es None
entonces el método retorna al pool. Si es None entra al if y luego se abre un bloque try, para el
manejo de excepciones, dentro del try llamamos al atributo de clase
pool = pooling.MySQLConnectionPool para crear el pool de conexión. Dentro del método se asignan
las constantes a las variables como se ve en la imagen. Luego, asigna el pool a cls.pool y lo retorna.

Si hay un error al crear el pool, captura la excepción y lanza una nueva excepción personalizada.
Error es una excepción específica de mysql.connector que ocurre cuando hay problemas en la
conexión.raise Exception(...) genera un nuevo error con un mensaje más descriptivo.

Luego debemos crear otro método de clase que retornará una conexión, podemos llamarlo
obtener_conexion(cls) Este método solo estará encargado de retornar al metodo obtener_pool()
invocando al metodo get_connection() todo esto lo encerramos en un bloque Try except
Finalmente, para obtener una conexión debemos crear en el programa principal una variable que
contendrá al objeto conexión. Ejemplo en la siguiente imagen

Es importante cerrar la conexión y el cursor. Existe otra opción para finalizar las conexiones y
cursores que ayudan minimizar errores, por olvidar cerrar las conexiones

El with permite encerrar en su interior la creación de una conexión o un cursor, asegurando que los
recursos se gestionen automáticamente. Dentro de su bloque, se ejecutan las operaciones
necesarias sobre la conexión o el cursor. Al finalizar el bloque, with se encarga automáticamente de
liberar los recursos, cerrando la conexión o el cursor que hayan sido abiertos dentro de él, incluso
si ocurre un error durante la ejecución.

Ejercicio Evaluación:
Ejercicio propuesto

Objetivo:

Crear un sistema en Python que:

✔ Permita interactuar con una base de datos en MySQL y las tablas clientes, productos, compras
y detalles_compra.

✔ Use un pool de conexiones para manejar la base de datos de manera eficiente.

También podría gustarte