Está en la página 1de 15

Web para descarga e instalación MySQl y Workbench

https://www.simplilearn.com/tutorials/mysql-tutorial/mysql-workbench-installation

Ejemplos conexión pyton con MySQL


https://parzibyte.me/blog/2018/09/18/python-3-mysql-crud-ejemplos-conexion/

Utilizar bases de datos MySQL con Python


https://programacionfacil.org/blog/utilizar-bases-de-datos-mysql-con-python/
https://www.youtube.com/watch?v=RgLzqIFZg8s

Para asignar permisos de acceso de otros usuarios a la BD


MySQL
https://codigofacilito.com/articulos/asignar-permisos-mysql

Para crear nuevo usuario de mysql workbench


https://www.youtube.com/watch?v=SB36NEQMzVk

Instalar visual estudio code


(Este es un entorno para codificar y desarrollar aplicaciones)
https://www.youtube.com/watch?v=7Xpohi_LvIk

Python: Modelo para crear conexión con MySQL y


programar un menú para los usuarios
https://www.youtube.com/watch?v=d3mYv1r4DkQ

20,403 vistas 7 ene 2021 Curso de Python 3 desde 0 🐍 👨🏻‍💻 |


UskoKruM2010
Crea tu primera aplicación de consola con Python 3 capaz de conectarse a una base de datos MySQL (específicamente
MariaDB) y realizar las 4 operaciones CRUD (Create, Read, Update, Delete) para gestionar datos de forma dinámica a

través de un menú de opciones. #python #python3 #pythonapp Capítulos ⌛ 00:00 Introducción 02:42 Creación del
proyecto 03:14 Conexión a MySQL 07:31 Creación de menú principal 16:10 Listado de cursos (SELECT) 25:50 Registro
de cursos (INSERT INTO) 33:11 Validación de ingreso de datos 38:18 Eliminación de cursos (DELETE) 48:15

Actualización de cursos (UPDATE) 56:56 Conclusiones 57:22 Agradecimiento 👨‍💻 Código Fuente:
https://github.com/UskoKruM/app_conso...

SÍGUEME ✅ ! ** Curso Udemy Bases de datos con MySQL: http://bit.ly/2vtrUg9 ** INSTAGRAM:


http://instagram.com/uskokrum2010 ** FACEBOOK: http://facebook.com/UskoKruM2010 ** TWITTER:
http://twitter.com/uskokrum2010 ** SITIO WEB: http://uskokrum2010.com ** GITHUB: http://github.com/UskoKruM
** SUSCRÍBETE:

/ uskokrum2010 🔴 ¿Quieres aprender y conversar sobre programación? Únete a nuestro grupo de Telegram ▶ :

https://t.me/uskokrum2010_yt Otros Cursos GRATUITOS ✅ : HTML: • Curso de HTML des... PYTHON 3:


• Curso de Python 3... DJANGO: • Curso Django desd... JAVA: • Curso de Java des... SQL SERVER:
• Curso de SQL Serv... C#: • Curso de C# (C Sh... PHP y MySQL: • Curso de PHP y My... VISUAL
BASIC .NET: • Curso de Visual B... JAVASCRIPT: • Curso de JavaScri... jQuery:
• Curso jQuery desd... CÓMO EDITAR CON CAMTASIA STUDIO 8: • CÓMO UTILIZAR CAM...
CÓMO USAR ZOOM PARA CLASES VIRTUALES: • Cómo Usar ZOOM Pa... python python 3 python3 python app
crear una app con python app de consola con python crud con python menú de opciones con python python menu
python con mysql python mysql python mariadb python database base de datos con python python youtube python
tutorial python programacion python para principiantes python curso python desde cero curso python tutorial python
python gratis python avanzado aprender python aprendiendo python curso de python tutorial de python español
curso python español python español interprete python python clases python objetos objetos en python python
herencia UskoKruM2010

CURSO PYTHON
https://codigofacilito.com/cursos/python-profesional

https://www.youtube.com/watch?v=RgLzqIFZg8s
Conexión.py
import mysql.connector
conexion =
mysql.connector.connect(user='root',
password='Jesmarevalo160686*', host
='localhost', database =
'jproyectos', port ='3306')
print(conexion)
S C:\Users\clori> & C:/Users/clori/AppData/
Local/Programs/Python/Python311/python.exe "c
:/Users/clori/Desktop/CURSO BD/conexion.py"
<mysql.connector.connection_cext.CMySQLConn
ection object at 0x0000019B026F5450>
PS C:\Users\clori>

Para agregar nuevos usuarios y crear permisos


sobre la BD MySQL

Para crear usuarios


https://www.youtube.com/watch?v=nT5tGZe-
a4M
https://codigofacilito.com/articulos/asignar-
permisos-mysql

Agregar nuevos usuarios


Para que nosotros generemos un nuevo usuario lo primero que debemos de hacer es autenticarnos
en el servidor.

mysql -u root -p -h localhost<ip>


Posteriormente debemos de generar un nuevo Usuario, Para esto ejecutamos las siguiente
sentencia.
CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'password';
Hasta este punto, nosotros ya podemos autenticarnos con el servidor utilizando el nuevo usuario,
sin embargo, una vez autenticado las acciones que podemos hacer son mínimas, debido a que este
usuario no posee los permisos necesarios para trabajar con las bases de datos.

Asignar permisos
Para poder establecer permisos, las siguiente sentencias deben de ejecutarse utilizando el
usuario root.

Si queremos que el nuevo usuario tenga permisos de administrador (Todos los permisos),
debemos de ejecutar la siguiente sentencia.

GRANT ALL PRIVILEGES ON *.* TO 'nombre_usuario'@'localhost';


Los asteriscos indican que los permisos serán asignados a todas las bases de datos y a todas las
tablas (primer asteriscos bases de datos, segundo asterisco tablas).

Si queremos asignar permisos para ciertas acciones, la sentencia quedaría de la siguiente manera.
Reemplazamos ALL PRIVILEGES y colocamos las acciones que queremos asignar.

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP


-> ON codigofacilito.*
-> TO 'nombre_usuario'@'localhost';
En esta ocasión estamos indicando que el nuevo usuario podrá consultar, crear, actualizar y
eliminar registros, así cómo podrá crear o eliminar elementos (tablas, índices, columnas,
funciones, stores, etc ...).

Todos estos permisos serán válidos únicamente en la base de datos codigofacilito y se aplicarán a
todas las tablas.

Si queremos asignar permisos únicamente a una tabla, reemplazamos el asteriscos por el nombre
de la tabla.

ejemplo codigofacilito.usuarios

Una vez hayamos finalizado con los permisos, el último paso será refrescarlos.
FLUSH PRIVILEGES;

Permisos
Aquí un listado de algunos permisos que podemos asignar.

 CREATE permite crear nuevas tablas o bases de datos.


 DROP permite eliminar tablas o bases de datos.
 DELETE permite eliminar registros de tablas.
 INSERT permite insertar registros en tablas.
 SELECT permite leer registros en las tablas.
 UPDATE permite actualizar registros en las tablas.
 GRANT OPTION permite remover permisos de usuarios.
 SHOW DATABASE Permite listar las bases de datos existentes.

Sentencias a tener en cuenta


Listado de todos los usuarios.

SELECT User FROM mysql.user;


Eliminar un usuario.

DROP USER 'usuario'@'localhost';


Remover permisos en concreto (Ejemplo update y delete).

REVOKE UPDATE, DELETE ON *.* FROM 'usuario'@'localhost';


Remover todos los privilegios.

REVOKE ALL PRIVILEGES ON *.* FROM 'usuario'@'localhost';


///////////XXXXXXXXXXXXXXXXXXXXXXXXXXX///////
Modelo llaves foráneas con MySQL (del curso)
CREATE TABLE t_persona (
id_persona int(11) NOT NULL AUTO_INCREMENT,
paterno varchar(45) DEFAULT NULL,
materno varchar(45) DEFAULT NULL,
nombre varchar(45) DEFAULT NULL,
PRIMARY KEY (‘id_persona))
ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE t_domicilio (


id_domicilio int(11) NOT NULL AUTO_INCREMENT,
id_persona int(11) NOT NULL,
pais VARCHAR(45) DEFAULT NULL,
cp varchar(45) DEFAULT NULL,
PRIMARY KEY (id_domicilio)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `proyectos2`.`t_domicilio`


ADD INDEX `fk_idpersonadomicilio_idx` (`id_persona` ASC) VISIBLE;
ALTER TABLE `proyectos2`.`t_domicilio`
ADD CONSTRAINT `fk_idpersonadomicilio`
FOREIGN KEY (`id_persona`)
REFERENCES `proyectos2`.`t_persona` (`id_persona`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
Para la BD proyectos de Jesmar
(primer modelo de prueba)
-- Crea nueva Base de Datos y la abre para su uso
CREATE DATABASE Clientes_Proyectos;
Use Clientes_Proyectos;

-- Crea Tabla Clientes en la BD CLientes_Proyectos


CREATE TABLE Clientes (
id_Cliente int(15) NOT NULL AUTO_INCREMENT,
C_nombre varchar(45) DEFAULT NULL,
C_pais varchar(45) DEFAULT NULL,
C_email varchar(45) DEFAULT NULL,
C_telefonos varchar(45) DEFAULT NULL,
PRIMARY KEY (id_Cliente))
ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Crea tabla Proyectos en la BD Clientes_Proyestos


CREATE TABLE Proyectos (
id_Proyecto int(15) NOT NULL AUTO_INCREMENT,
id_Cliente int(15) NOT NULL,
P_nombre VARCHAR(45) DEFAULT NULL,
P_descrip VARCHAR(45) DEFAULT NULL,
P_nombcontacto VARCHAR(45) DEFAULT NULL,
P_ferecibido DATE null,
P_fepropuentrega DATE null,
P_monto float(6,2) DEFAULT NULL,
P_feentregado DATE null,
P_statavance TINYINT,
P_statcobro TINYINT,
PRIMARY KEY (id_Proyecto)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Agrear un indice a la tabla "Proyectos" con el id_Cliente y


-- luego declarar como llave foranea.
ALTER TABLE `Clientes_Proyectos`.`Proyectos`
ADD INDEX `fk_idclienteproyecto_idx` (`id_Cliente` ASC) VISIBLE;

ALTER TABLE `Clientes_Proyectos`.`Proyectos`


ADD CONSTRAINT `fk_idclienteproyecto`
FOREIGN KEY (`id_Cliente`)
REFERENCES `Clientes_Proyectos`.`Clientes` (`id_Cliente`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

/////////////////////////////////////////////////////////////
ALTER TABLE `proyectos2`.`t_domicilio`
ADD INDEX `fk_idpersonadomicilio_idx` (`id_persona` ASC) VISIBLE;
ALTER TABLE `proyectos2`.`t_domicilio`
ADD CONSTRAINT `fk_idpersonadomicilio`
FOREIGN KEY (`id_persona`)
REFERENCES `proyectos2`.`t_persona` (`id_persona`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

MODELO PROGRAMACION CODIGO Python & MySQL


Aplicación de consola con menú de opciones
Se trabaja en la plataforma de Visual Studio Code
Principal.py.App_Consola_crud. Visual Studio Code
DAO: Data Access Object (Objeto de acceso a datos)

Explorador Principal.py
>EDIRORES ABIERTOS From BD.conexion import DAO
>APP_CONSOLA_CRUD Import funciones
> o _pycache_
> BD ………………..
* Funciones.py
* principal.py

Principal.py
Principal.py > * menuPrincipal
1 from BD.conexion import DAO
2 import funciones
3
4
5 def menuPrincipal():
6 continuar = True
7 while(continuar):
8 opcionCorrecta = False
9 while(not opcionCorrecta):
10 print(“==================== MENU PRINCIPAL ====================”)
11 print(“1.- Listar cursos”)
12 print(“2.- Registrar curso”)
13 print(“3.- Actualizar curso”)

Python: Modelo para crear conexión con MySQL y


programar un menú para los usuarios
https://www.youtube.com/watch?v=d3mYv1r4DkQ
Curso de Python desde cero
https://www.youtube.com/watch?v=YRmH2MJMBI4&list=PL_wRgp7nihybbJ2vZaVGI5TDdPaK_dFuC

https://www.youtube.com/watch?v=-tgA40Ia9X8

Conexión.py

Import mysql.connector
from mysql.connector import Error

Class DAO():
Def init_(self):
Try:
Self.conexion = mysql.connector.connect(
host = ‘localhost’,
port = 3306,
user = ‘root’,
password = ‘123456’,
db = ‘universidad’
)

Except Error as ex:


Print(‘Error al intentar la conexion: {}’.format(ex))

// METODO PARA LISTAR CURSOS

def listarCursos(self):
If self.conexion.is_Connected():
Try:
Cursor = self.conexion.cursor()
Cursor.execute(“SELECT * FROM curso ORDER BY nombre ASC”)
Resultados = cursor.fechall()
Return resultados
Except error as ex:
Print(“Error al intentar la conexion: {}”.format(ex))

// METODO PARA INGRESAR CURSOS

def registrarCurso(self, curso):


If self.conexion.is_Connected():
Try:
cursor = self.conexion.cursor()
sql = “INSERT INTO (codigo, nombre, creditos) VALUES (‘{0}’, ‘{1}’, ‘{2}’)”
cursor.execute (sql.format(curso[0], curso[1], curso[2]))
self.conexion.commit()
print(“Curso registrado \n”)

Except error as ex:


Print(“Error al intentar la conexion: {}”. format(ex))

// METODO PARA ELIMINAR CURSOS

def eliminarCurso(self, codigoCursoEliminar):


If self.conexion.is_Connected():
Try:
cursor = self.conexion.cursor()
sql = “DELETE FROM curso WHERE codigo = ‘{0}’”
cursor.execute (sql.format(codigoCursoEliminar))
self.conexion.commit()
print(“Curso eliminado \n”)
Except error as ex:
Print(“Error al intentar la conexion: {}”. format(ex))

// METODO PARA ACTUALIZAR CURSOS

def actualizacionCurso(self, curso):


If self.conexion.is_Connected():
Try:
cursor = self.conexion.cursor()
sql = “UPDATE curso SET nombre = ‘{0}’,créditos = {1}, WHERE código = ‘{2}’ ”
cursor.execute (sql.format(curso[1], curso[2], curso[0]))
self.conexion.commit()
print(“Curso actualizado \n”)
Except error as ex:
Print(“Error al intentar la conexion: {}”. format(ex))

Principal.py
from BD conexion import DAO
Import funciones

def menuPrincipal():
continuar = True
while(continuar):
opcion correcta = False
while(not opciónCorrecta):
print(“============== MENU PRINCIPAL ==========”)
print(‘1.- Listar cursos’)
print (‘2.- Registrar curso’)
print (‘3.- Actualizar curso’)
print (‘4.- Eliminar curso’)
print (‘5.- Salir’)
print (‘============== ============== ==========’)
opcion = int(input(‘Seleccione una opción : ‘))

If opción < 1 or opción > 5:


Print(‘Opcion incorrecta, ingrese nuevamente…..’)
elif opción == 5:
continuar = False
print (‘Gracias por usar este sistema!…..’)
break
else:
opcionCorrecta = True
ejecutarOpcion(opción)

def ejecutarOpcion(opción)
dao = DAO()

if opción == 1:
try:
cursos = dao.listarCursos()
if len(cursos) > 0:
funciones.listarCursos(cursos)
else
print(“No se encontraron cursos….”)
except:
print(“Ocurrio un error..….”)

elseif opción == 2:
curso = funciones.pedirDatosRegistro()
try:
cursos = dao.registrarCursos()
if len(cursos) > 0:
funciones.listarCursos(cursos)
else
print(“No se encontraron cursos….”)
except:
print(“Ocurrio un error..….”)

elseif opción == 3:
try:
cursos = dao.listarCursos()

if len(cursos) > 0:
curso = funciones.pedirDatosActualizacion(cursos)
if curso:
dao.actualizarCurso(curso)
else:
print(“Código de curso no encontrado… \n”)
else:
print(“No se encontraron cursos… \n”)
except:
print(“Ocurrio un error..….”)

elseif opción == 4:
try:
cursos = dao.listarCursos()

if len(cursos) > 0:
codigoEliminar=funciones.pedirDatosEliminacion(cursos)
if not(codigoEliminar == “”):
dao.elimiarCurso(CodigoEliminar)
else:
print(“Codigo de curso no encontrado..….\n”)
else:
except:
print(“Ocurrio un error..….”)
Funciones.py

Def listar(cursos):
Print(“\n Cursos: ”)
Contador = 1
For cur in cursos:
datos = “{0} Codigo: {1}|Nombre: {2} ({} Creditos)”
print(datos.format(contador, cur[0], cur[1], cur[2]))
contador = contador + 1
print(“ ”)

Def pedirDatosRegistro():
codigoCorrecto = False
while()not codigoCorrecto):
código = imput(“Ingrese código: ”)
if len(código) == 6:
codigoCorrecto == true
else:
print(“Codigo incorrecto: debe tener 6 digitos”)

nombre = input(“Ingrese nombre: ”)

creditosCorrecto = false
while(not creditosCorrecto):
creditos = input(“Ingrese créditos: ”)
if créditos.isnumeric():
if (int(creditos) > 0):
creditosCorrecto = true
créditos = int(creditos)
else:
print(“Los créditos deben ser mayor a cero (0)”)
else:
print(“Creditos incorrectos: debe ser numerico.”)
curso = (código, nombre, creditos)
return curso

Def pedirDatoseliminacion(cursos):

listarCursos(cursos)
existe Codigo = False
codigoELiminar = input(“Ingrese el Código del curso a eliminar: ”)
for cur in cursos:
if cur[0] == codigoEliminar:
existe Codigo = True
break

if not existeCodigo:
codigoEliminar = “”
reurn codigoEliminar

Def pedirDatosActualizacion(cursos):
listarCursos(cursos)
existe Codigo = False
codigoEditar = input (“Ingrese el Código del curso a modificar: ”)

for cur in cursos:


if cur [0] == codigoEditar:
existe Codigo = True
break

if existeCodigo:
nombre=input (“Ingrese créditos: ”)
creditoCorrecto = False
while (not creditosCorrecto):
creditos = input(“Ingrese creditos a modificar : ”)
if créditos.isnumeric():
if (int(creditos) > 0):
creditosCorrecto = True
creditos = int(creditos)
else:
print(“Los créditos deben ser mayor a cero”)
else:
print(“Créditos incorrectos: solo acepta valores
numericos”)
curso = (codigoEditar,nombre,creditos)
else:
curso = None
Return curso

return codigoEliminar

También podría gustarte