Python base de datos MySQL

¡Hola a todos!, hoy vamos a hablar acerca de como conectar Python 3 con tu base de datos MySQL. Este va a ser un post un poco largo, pero no te asustes, 75% de este es preparar la base de datos para los ejemplos que siguen.

Si ya tienes una base de datos, vas a ver un pequeño mensaje que te va a indicar que sección puedes saltear. Si eres nuevo o no tienes una base de datos lista, te recomiendo que leas todo el post.

Si tienes algún problema, déjame un comentario. Voy a hacer todo lo posible por ayudarte.

Dificultad para encontrar información


Todo comenzó hace algunos días. Yo estaba haciendo un pequeño juego de pong cuando una idea genial cruzó mi mente:
“¿Por qué no hacerlo multijugador? Seguro, porqué no?”
Como cualquiera de ustedes, cuando decido comenzar algún proyecto nuevo, lo primero que hago es una investigación rápida, alias “googlearlo”. Desafortunadamente, ninguno de los resultados estaban funcionando. Probé diferentes librerías, pero ninguna era compatible con Python 3. Muchas estaban desactualizadas mientras que otras no funcionaban siquiera.
Así que acá estoy, haciendo este simple post, para ahorrarles varias horas buscando en la web sin dirección alguna. ¡Espero que les sirva y lo disfruten!

Configurando la base de datos MySQL


Comencemos con crear una simple base de datos en MySQL. Puede estas hosteada donde quieras, local o externa (nosotros vamos a usar esta última para el tutorial).

Si ya tienes una base de datos creada, puedes saltearte esta sección

La forma más rápida de crear nuestra base de datos MySQL para hacer pruebas, es hacerla en www.freemysqlhosting.net. Solo haz click en Start my free account, registrate y listo.

Una vez completado el paso anterior ve a www.freemysqlhosting.net/account/. Una vez dentro, selecciona la ubicación de tu base de datos (elige cualquiera, no es de importancia para este tutorial). Luego, crea tu base de datos.

Cuando tu base de datos este creada, deberías recibir un email con los datos de autenticación que vamos a necesitar (asegúrate de NO eliminar el mensaje). También, dentro de este mail hay un link a phpmyadmin, has click ahí.

PhpMyAdmin

Para iniciar sesión en tu cuenta de phpmyadmin , solo debes llenar los campos con lo datos recibidos en el email. Bien, ahora es tiempo de crear nuestra tabla.

Debes encontrar el botón que dice SQL en la parte superior de la página. Has click ahí and pega el siguiente código. Este creará la tabla que vamos a utilizar.

CREATE TABLE `sql9213614`.`test` ( `id` INT NOT NULL AUTO_INCREMENT , `name` TEXT NOT NULL , `email` TEXT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

enter image description here

Terminamos por ahora, ya puedes pasar a la sección de Python

Código de Python


Acabamos de configurar todo lo necesario para este tutorial. Es momento de ensuciarse las manos.

Instalación

Los primero que tenemos que hacer (y probablemente el único requerimiento) es instalar la librería que nos va a permitir conectarnos con nuestra base de datos. Para hacer esto, vamos a usar PyMySQL. El repositorio de la librería lo puedes encontrar aquí PyMySQL in Github.

$ pip install pymysql

Ejemplo más sencillo

Echemosle un vistazo a mínimo pedazo de código. Todo lo que hace es devolver la versión de la base de datos, suficiente para chequear si todo está funcionando como debería. Al final puedes encontrar una explicación detallada del mismo.

Ten en cuenta que debes modificar la configuración con las credenciales de tu base de datos.

import pymysql

############### CONFIGURAR ESTO ###################
# Abre conexion con la base de datos
db = pymysql.connect("database_host","username","password","database_name")
##################################################

# prepare a cursor object using cursor() method
cursor = db.cursor()

# ejecuta el SQL query usando el metodo execute().
cursor.execute("SELECT VERSION()")

# procesa una unica linea usando el metodo fetchone().
data = cursor.fetchone()
print ("Database version : {0}".format(data))

# desconecta del servidor
db.close()

Si corres este código, y las credenciales de tu base de datos son correctos, deberías ver que la consola imprime la versión de tu base de datos. Si todo funcionó según lo planeado, felicitaciones, acabas de superar la parte más complicada.

Si no lo puedes hacer funcionar, no dudes en dejarme un comentario, voy a hacer todo lo posible par ayudarte.

Insertar filas en la base de datos

Bien, ahora que sabemos que todo funciona correctamente, es hora de comenzar a guardar datos. Como siempre, primero subo el código y luego lo explico abajo.

import pymysql

############### CONFIGURAR ESTO ###################
# Open database connection
db = pymysql.connect("database_host","username","password","database_name")
##################################################

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO test(id, name, email) \
   VALUES (NULL,'{0}','{1}')".format("cosme","testmail@sever.com")
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()


# desconectar del servidor
db.close()

No hay mucho que explicar, creo que el código se explica por si mismo. Hay algunas cosas que debes tener en cuenta:

  • La tabla es sensible a las mayusculas, por lo que debemos usar test y no TEST
  • Para evitar escribir la columna índice, debes pasar NULL

Si corres este código, vas a notar que una nueva fila fue agregada a tu base de datos.

Leer base de datos

Este caso es muy similar al de INSERT. Vamos a ver un simple ejemplo con SELECT, pero puedes usar cualquier comando de SQL.

import pymysql

############### CONFIGURAR ESTO ###################
# Open database connection
db = pymysql.connect("database_host","username","password","database_name")
##################################################

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to READ a record into the database.
sql = "SELECT * FROM test \
WHERE id > {0}".format(0)

# Execute the SQL command
cursor.execute(sql)

# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for row in results:
   id = row[0]
   name = row[1]
   email = row[2]
   # Now print fetched result
   print ("id = {0}, name = {1}, email = {1}".format(id,name,email))

# disconnect from server
db.close()

Eso es todo. Asegúrate de tener algo escrito en tu tabla o el código no devolverá nada.

Conclusión

Creo que vas entendiendo como funciona esto, puedes usar muchos otros comandos, como por ejemplo DELETE. Todos siguen las misma lógica, pero para más información no olvides de mirar
PyMySQL documentation.

A pesar de que MySQL is una tecnología de base de datos un poco antigua, aún sigue siendo utilizada en muchas aplicaciones y con la ayuda de Python 3 puedes crear aplicaciones de forma rápida y sencilla.

Desafortunadamente, tuve otros problemas para terminar mi juego Pong (la conexión con la base de datos toma 1 segundo lo que genera lag en el juego), pero esa es otra historia.

No dudes es hacer la pregunta que necesites o de compartir como has logrado conectar tu aplicación de Python a una base de datos MySQL.


Deja un comentario