6.2. MySQL¶
Nota
Propósito: El motor de base de datos relacionales MySQL, tiene un adaptador Python e implementa la especificación DB API v2.0 (PEP-249), el objeto de esta guía es para explicar y demostrar como usarlo como desarrollador.
Figura 6.6, Logotipo de MySQL¶
El módulo PyMySQL, es el adaptador de base de datos MySQL para el lenguaje de
programación Python. Sus principales características son la implementación de la especificación
Python DB-API 2.0 y que esta desarrollado puramente en Python.
A diferencia del módulo SQLite, no hay un módulo Python SQL predeterminado en
la librería estándar de Python, que pueda usar para conectarse a una
base de datos MySQL. En su lugar, deberá instalar un módulo externor que funja como controlador
Python SQL para el servidor MySQL para poder interactuar con base de datos desde aplicaciones de
Python.
Truco
Es un adaptador de base de datos MySQL para el lenguaje de programación Python.
6.2.1. Instalación¶
Para conectarte al servidor MySQL necesita el módulo PyMySQL. Esto significa que debe instalar
PyMySQL ejecutando los siguientes comandos correspondiente a cada sistema operativo, los cuales se
presentan a continuación:
Para trabajar una aplicación con bases de datos relacionales MySQL requiere
instalar las siguientes librerías/módulos:
Instalar el módulo
PyMySQL, ejecutando el siguiente comando:pip3 install PyMySQLMotor de base de datos MySQL.
Instalar el módulo
PyMySQL, ejecutando el siguiente comando:pip3 install PyMySQLMotor de base de datos MySQL.
Puede probar si la instalación se realizo correctamente, ejecutando el siguiente comando correspondiente a tu sistema operativo:
python3 -c "import pymysql ; print(pymysql.__version__)"
python3 -c "import pymysql ; print(pymysql.__version__)"
Si muestra el número de la versión instalada de PyMySQL, tiene correctamente instalado
el módulo. Con esto, ya tiene todo listo para continuar.
6.2.1.1. Servidor MySQL¶
Para instalar el servidor MySQL existen varias formas de realizarlo, para en este caso
se realizara con la tecnología Docker. Esto significa que debe instalar en tu sistema operativo:
Luego de instalar las herramientas necesarias, debe ejecutar el siguiente comando correspondiente:
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=sistema -p 3306:3306 -v my_data:/var/lib/mysql --restart always mysql:latest
El comando anterior crea un contenedor Docker llamado mysql con la version latest,
ejecutándose en el puerto 3306 con la base de datos llamada sistema e incluye un punto de montaje my_data.
De esta forma ha instalado y ejecutado el servidor MySQL necesario para las próximas script
Python a ejecutar. Con esto, ya tiene todo listo para continuar.
6.2.1.1.1. Estructura de archivos¶
Para crear la estructura de archivos del proyecto MySQL debe ejecutar los siguientes comandos:
Crear el directorio crud con el siguiente comando:
Crear y acceder al directorio en un solo comando, ejecutando el siguiente comando:
mkdir -p ~/proyectos/mysql/crud && cd $_
El comando anterior crea la siguiente estructura de directorios:
proyectos/
└── mysql/
└── crud/
Debe crear el directorio crud, ejecutando el siguiente comando:
md .\proyectos\mysql\crud
Debe acceder al directorio , ejecutando el siguiente comando:
cd .\proyectos\mysql\crud
El comando anterior crea la siguiente estructura de directorios:
proyectos/
└── mysql/
└── crud/
Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.
6.2.2. Cadenas de conexión¶
Para definir el método connect debe definir las cadenas de conexión con MySQL
como se describe a continuación:
USERUsuario de conexión a la base de datos.
PASSWContraseña del usuario de conexión a la base de datos.
HOSTIP o dirección DNS de conexión al servidor de la base de datos.
PORTPuerto de conexión al servidor de la base de datos, por defecto es 3306.
DBNombre de la base de datos a cual conectar.
A continuación presento un ejemplo en Python implementando una cadena de conexión
para una base de datos MySQL:
1 2 3 4 5 6 7 8 9 10 11 | |
El ejemplo anterior se describe a continuación:
En la línea 1, se importa el módulo
pymysql.En la línea 3, se define en la constante
USER, del usuario de conexión a la base de datos.En la línea 4, se define en la constante
PASSW, de la contraseña del usuario de conexión a la base de datos.En la línea 5, se define en la constante
HOST, la IP o dirección DNS de conexión al servidor de la base de datos.En la línea 6, se define en la constante
PORT, el puerto de conexión al servidor de la base de datos.En la línea 7, se define en la constante
DB, el nombre de la base de datos a cual conectar.En la línea 8, se define en el método
connect, el cual establece la conexión a la base de datos.
De esta forma se crea una cadena de conexión para MySQL para ser usada por el método connect.
6.2.3. Insertar registros¶
Si requiere insertar registro en una tabla, a continuación tiene un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | |
Importante
Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:
Truco
Para ejecutar el código mysql_record_insert.py
abra una consola de comando, acceda al directorio donde se encuentra el programa:
proyectos/
└── mysql/
└── crud/
└── mysql_record_insert.py
Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:
python3 mysql_record_insert.py
El anterior código al ejecutar debe mostrar el siguiente mensaje:
INFO:root:✅ ¡Conectado a la base de datos 'sistema'!
INFO:root:✅ ¡Fue creo una tabla correctamente en la base de datos 'sistema'!
INFO:root:✅ ¡Fueron insertado(s) 3 registro(s) correctamente en la tabla!
INFO:root:✅ ¡Fueron insertado(s) 1 registro(s) correctamente en la tabla!
INFO:root:✅ ¡La conexión MySQL a la base de datos 'sistema' fue cerrada!
Puede probar si la base de datos sistema fue creada correctamente, ejecutando
el siguiente comando correspondiente a tu sistema operativo:
docker exec -i mysql mysql -u root -proot -e "SHOW DATABASES;" mysql
docker exec -i mysql mysql -u root -proot -e "SHOW DATABASES;" mysql
Puede probar si el usuario root de la base de datos sistema fue creada correctamente, ejecutando
el siguiente comando correspondiente a tu sistema operativo:
docker exec -i mysql mysql -u root -proot -e "SELECT user FROM mysql.user;" mysql
docker exec -i mysql mysql -u root -proot -e "SELECT user FROM mysql.user;" mysql
Puede probar si la tabla clientes en la base de datos sistema fue creada correctamente, ademas
si sus registros fueron cargados en la tabla, ejecutando el siguiente comando correspondiente a tu sistema operativo:
docker exec -i mysql mysql -u root -proot -e "USE sistema; SHOW TABLES; SELECT * FROM clientes;" mysql
docker exec -i mysql mysql -u root -proot -e "USE sistema; SHOW TABLES; SELECT * FROM clientes;" mysql
De esta forma puede ingresar registros en una tabla dentro una base de datos MySQL.
6.2.4. Consultar registros¶
Si requiere consultar registros de tabla, a continuación tiene un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | |
Importante
Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:
Truco
Para ejecutar el código mysql_record_select.py
abra una consola de comando, acceda al directorio donde se encuentra el programa:
proyectos/
└── mysql/
└── crud/
└── mysql_record_select.py
Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:
python3 mysql_record_select.py
El anterior código al ejecutar debe mostrar el siguiente mensaje:
INFO:root:✅ ¡Conectado a la base de datos 'sistema'!
📜 Total de filas son: 4
📜 Mostrar cada fila:
Id: 1
Nombre: Leonardo Caballero
Código postal: 5001
Teléfono: +58-412-4734567
Id: 2
Nombre: Ana Poleo
Código postal: 6302
Teléfono: +58-426-5831297
Id: 3
Nombre: Manuel Matos
Código postal: 4001
Teléfono: +58-414-2360943
Id: 4
Nombre: Liliana Andradez
Código postal: 3105
Teléfono: +58-414-6782473
INFO:root:✅ ¡La conexión MySQL a la base de datos 'sistema' fue cerrada!
De esta forma puede consultar registros en una tabla dentro una base de datos MySQL.
6.2.5. Actualizar registros¶
Si requiere actualizar registro de tabla, a continuación tiene un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | |
Importante
Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:
Truco
Para ejecutar el código mysql_record_update.py
abra una consola de comando, acceda al directorio donde se encuentra el programa:
proyectos/
└── mysql/
└── crud/
└── mysql_record_update.py
Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:
python3 mysql_record_update.py
El anterior código al ejecutar debe mostrar el siguiente mensaje:
INFO:root:✅ ¡Conectado a la base de datos 'sistema'!
INFO:root:✅ ¡Fueron actualizado(s) 2 registro(s) correctamente en la tabla!
INFO:root:✅ ¡La conexión MySQL a la base de datos 'sistema' fue cerrada!
De esta forma puede actualizar registros en una tabla dentro una base de datos MySQL.
6.2.6. Eliminar registros¶
Si requiere eliminar registro de tabla, a continuación tiene un ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
Importante
Usted puede descargar el código usado en esta sección haciendo clic en el siguiente enlace:
Truco
Para ejecutar el código mysql_record_delete.py
abra una consola de comando, acceda al directorio donde se encuentra el programa:
proyectos/
└── mysql/
└── crud/
└── mysql_record_delete.py
Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:
python3 mysql_record_delete.py
El anterior código al ejecutar debe mostrar el siguiente mensaje:
INFO:root:✅ ¡Conectado a la base de datos 'sistema'!
INFO:root:✅ ¡Registro eliminado correctamente!
INFO:root:✅ ¡La conexión MySQL a la base de datos 'sistema' fue cerrada!
De esta forma puede eliminar registros en una tabla dentro una base de datos MySQL.
Nota
Así de esta forma puede realizar las operaciones de ingresar, consultar, actualizar
y eliminar registro en una tabla en una base de datos MySQL de forma separada
en programas Python, en la siguiente práctica se mostrara un caso real de uso de todos
estas operaciones en un solo programa Python.
6.2.7. Práctica - Caso real¶
A continuación se presenta una práctica más real de implementar el uso de proyectos
con MySQL en Python:
6.2.7.1. Estructura de archivos¶
Para crear la estructura de archivos del proyecto MySQL debe ejecutar los siguientes comandos:
Crear y acceder al directorio sistema en un solo comando, ejecutando el siguiente comando:
mkdir -p ~/proyectos/mysql/sistema && cd $_
El comando anterior crea la siguiente estructura de directorios:
proyectos/
└── mysql/
└── sistema/
Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.
Debe crear el directorio sistema, ejecutando el siguiente comando:
md .\proyectos\mysql\sistema
Debe acceder al directorio , ejecutando el siguiente comando:
cd .\proyectos\mysql\sistema
El comando anterior crea la siguiente estructura de directorios:
proyectos/
└── mysql/
└── sistema/
Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.
A continuación se presenta y explica el uso de cada archivo para este proyecto:
Archivo .env.example
Archivo plantilla dotenv, es un archivo de configuración de variables de entorno
para el proyecto. Además, es usado para establecer variables de entorno con
Docker, Docker Compose y del paquete adicional python-dotenv.
1 2 3 4 5 6 7 8 | |
Archivo requirements.txt
Archivo de requirements.txt de la herramienta de gestión de paquetes pip.
1 2 3 4 | |
Archivo settings.py
Módulo de configuraciones del programa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | |
Archivo main.py
Módulo principal del programa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | |
Archivo docker-compose.yml
Para instalar el servidor MySQL existen varias formas de realizarlo, para en este caso
se realizara con la tecnología Docker. Esto significa que debe instalar en tu sistema operativo:
El primer paso para configurar un entorno de desarrollo con Docker Compose es crear el archivo
de configuración docker-compose.yml. Este archivo define los servicios, contenedores, redes y
volúmenes necesarios para tu aplicación.
A continuación se presenta el archivo docker-compose.yml con la configuración necesaria:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Para ejecutar el código del proyecto llamado sistema abra una consola de comando, cree la
siguiente estructura de directorio y acceda al mismo donde se encuentra el programa:
proyectos/
└── mysql/
└── sistema/
├── docker-compose.yml
├── __init__.py
├── .env.example
├── main.py
├── requirements.txt
└── settings.py
Si tiene la estructura de archivo previa, entonces puede continuar los procesos de instalación, configuración y ejecución del código fuente.
Antes de ejecutar debes instalar sus dependencias, con el siguiente comando:
pip3 install -r requirements.txt
Además debe crear el archivo .env en base a la plantilla .env.example`
y editarlo, con el siguiente comando:
cp .env.example .env && nano .env
Truco
El archivo .env se definen las configuraciones de conexión a la base de datos,
puede modificarlo cambiar valores de la conexión.
Debe crear y editar el archivo docker-compose.yml, con el siguiente comando:
Truco
Para ejecutar el comando del instalador del servidor MySQL con Docker debe crear
un archivo llamado docker-compose.yml en el directorio sistema con el contenido
anterior de dicho archivo, ejecutando el siguiente comando:
nano docker-compose.yml
Truco
Si tiene creado el archivo con el contenido, entonces puede ejecutar la instalación un
servidor MySQL, ejecutando el siguiente comando:
docker-compose up -d
De esta forma crea el contenedor Docker llamado mysql, necesario para ejecutar el script Python.
Truco
Para ejecutar el código fuente de esta práctica debe invocar al módulo main.py,
abra una consola de comando, acceda al directorio donde se encuentra la estructura previa
y ejecute el siguiente comando:
python3 main.py
El anterior código al ejecutar debe mostrar el siguiente mensaje:
INFO:root:✅ ¡Conexión a la base de datos 'sistema' fue exitosa!
INFO:root:✅ ¡Fueron creado(s) 1 tabla(s) correctamente en la base de datos!
INFO:root:✅ ¡Fueron insertado(s) 3 registro(s) correctamente en la tabla!
INFO:root:✅ ¡Fueron insertado(s) 1 registro(s) correctamente en la tabla!
📜 Total de filas son: 4
📜 Mostrar cada fila:
Id: 1
Nombre: Leonardo Caballero
Código postal: 5001
Teléfono: +58-412-4734567
Id: 2
Nombre: Ana Poleo
Código postal: 6302
Teléfono: +58-426-5831297
Id: 3
Nombre: Manuel Matos
Código postal: 4001
Teléfono: +58-414-2360943
Id: 4
Nombre: Liliana Andradez
Código postal: 3105
Teléfono: +58-414-6782473
INFO:root:✅ ¡Fueron actualizado(s) 2 registro(s) correctamente en la tabla!
INFO:root:✅ ¡Registro eliminado correctamente!
INFO:root:✅ ¡La conexión MySQL a la base de datos 'sistema' fue cerrada!
Antes de ejecutar debes instalar sus dependencias, con el siguiente comando:
pip3 install -r requirements.txt
Además debe crear el archivo .env en base a la plantilla .env.example , con
el siguiente comando:
copy .env.example .env
Editar el archivo .env, con el siguiente comando:
notepad.exe .env &
Truco
El archivo .env se definen las configuraciones de conexión a la base de datos,
puede modificarlo cambiar valores de la conexión.
Debe crear y editar el archivo docker-compose.yml, con el siguiente comando:
Truco
Para ejecutar el comando del instalador del servidor MySQL con Docker debe crear
un archivo llamado docker-compose.yml en el directorio sistema con el contenido
anterior, ejecutando el siguiente comando:
notepad.exe docker-compose.yml
Truco
Si tiene creado el archivo con el contenido, entonces puede ejecutar la instalación un
servidor MySQL, ejecutando el siguiente comando:
docker-compose up -d
De esta forma crea el contenedor Docker llamado mysql, necesario para ejecutar el script Python.
Truco
Para ejecutar el código fuente de esta práctica debe invocar al módulo main.py,
abra una consola de comando, acceda al directorio donde se encuentra la estructura previa
y ejecute el siguiente comando:
python3 main.py
El anterior código al ejecutar debe mostrar el siguiente mensaje:
INFO:root:✅ ¡Conexión a la base de datos 'sistema' fue exitosa!
INFO:root:✅ ¡Fueron creado(s) 1 tabla(s) correctamente en la base de datos!
INFO:root:✅ ¡Fueron insertado(s) 3 registro(s) correctamente en la tabla!
INFO:root:✅ ¡Fueron insertado(s) 1 registro(s) correctamente en la tabla!
📜 Total de filas son: 4
📜 Mostrar cada fila:
Id: 1
Nombre: Leonardo Caballero
Código postal: 5001
Teléfono: +58-412-4734567
Id: 2
Nombre: Ana Poleo
Código postal: 6302
Teléfono: +58-426-5831297
Id: 3
Nombre: Manuel Matos
Código postal: 4001
Teléfono: +58-414-2360943
Id: 4
Nombre: Liliana Andradez
Código postal: 3105
Teléfono: +58-414-6782473
INFO:root:✅ ¡Fueron actualizado(s) 2 registro(s) correctamente en la tabla!
INFO:root:✅ ¡Registro eliminado correctamente!
INFO:root:✅ ¡La conexión MySQL a la base de datos 'sistema' fue cerrada!
La ejecución anterior generar la siguiente estructura:
proyectos/
└── mysql/
└── sistema/
├── __init__.py
├── .env
├── .env.example
├── main.py
├── requirements.txt
└── settings.py
Así de esta forma puede ingresar, consultar, actualizar y eliminar registro en una
tabla usando MySQL.
Importante
Usted puede descargar el código usado en esta sección haciendo clic en los siguientes enlaces:
Así de esta forma puede replicar una práctica real de un proyecto para realizar operaciones
en una base de datos MySQL, aplicando buenas prácticas de código funcional.
Ver también
Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.
¿Cómo puedo ayudar?
¡Mi soporte está aquí para ayudar!
Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. UTM - Madrid, España.
La hora aquí es actualmente 7:35 PM UTM.
Mi objetivo es responder a todos los mensajes dentro de un día hábil.