¡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 https://www.freemysqlhosting.net/ . Solo haz click en Start my free account, registrate y listo.
Una vez completado el paso anterior ve a . 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;
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í
https://github.com/PyMySQL/PyMySQL
.
$ 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","
[email protected]
")
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.
