En el articulo vamos a crear un script para conectar Python con una base de datos MySQL ademas vamos a insertar datos y a mostrarlos usando Mysqldb Connector.
Lo primero que tenemos que hacer es tener instalado Python, Mysql y el conector.
Te puede interesar Guia Completa de Introduccion a Python para reforzar y profundizar tus conocimientos.
En mi caso para instalar python-mysql use el comando:
sudo apt-get install python-mysqldb
Base de datos
La base de datos esta basada en el siguiente codigo SQL:
-- 1. Creamos la base de datos para nuestro proyecto
CREATE DATABASE pyex1;
-- 2. Seleccionamos la base de datos para empezar a trabajar en ella
USE pyex1;
-- 3. Definición de la estructura de la tabla 'person' (personas)
CREATE TABLE person (
-- Identificador único: autoincrementable y llave primaria
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-- Campos para el nombre y apellido con límite de 255 caracteres
name VARCHAR(255),
lastname VARCHAR(255),
-- Campo para la fecha de nacimiento (Formato: YYYY-MM-DD)
birth_at DATE,
-- Campo para el género (Ejemplo: 'M' para Masculino, 'F' para Femenino)
gender VARCHAR(1)
);Conexion a la base de datos
Para hacer la conexion a la base de datos usamos el siguiente codigo:
import MySQLdb db = MySQLdb.connect(host="127.0.0.1", user="root",passwd="",db="pyex1")
Lo que hacemos es importar el modulo MySQLdb y usar el metodo connect, los parametros son host(el host o servidor), user(el usuario con acceso a la base de datos), passwd(el password del usuario con acceso a la bd), db (la base de datos)
Insertar Datos
Para insertar datos usaremos las funciones cursor(), execute() y commit() de la siguiente manera:
# 1. Creamos el objeto cursor para interactuar con la base de datos
cursor = db.cursor()
# 2. Definimos y ejecutamos la sentencia SQL de inserción
# Insertamos un nuevo registro en la tabla 'person' (Campos: name y lastname)
sql = "INSERT INTO person (name, lastname) VALUES ('Agustin', 'Ramos')"
cursor.execute(sql)
# 3. Confirmamos los cambios de forma permanente en la base de datos
# Es fundamental el 'commit' para que los datos se guarden tras un INSERT
db.commit()
# 4. Cerramos el cursor para liberar recursos del servidor
cursor.close()
print("Registro insertado con éxito.")La misma manera que se usa para insertar datos, se puede usar para hacer actualizaciones y eliminar, entre otras consultas que no devuelvan valores.
Seleccionar Datos
Cuando se hace una seleccion o recorrido debemos usar los metodos, cursor, execute y fetchall, y recorrer el conjunto de datos devueltos usando un ciclo for:
# 1. Creamos un cursor para realizar la consulta
cursor = db.cursor()
# 2. Ejecutamos la sentencia SQL para seleccionar todos los registros
# Usamos '*' para traer todas las columnas: id, name, lastname, birth_at, gender
cursor.execute("SELECT * FROM person")
# 3. Recuperamos todos los resultados de la consulta en una lista de tuplas
data = cursor.fetchall()
# 4. Recorremos los registros (tuplas) y les damos formato de salida
# {0} = ID, {1} = Nombre, {2} = Apellido
for d in data:
print("{0} - {1} {2}".format(d[0], d[1], d[2]))
# 5. Cerramos el cursor para liberar la memoria del servidor
cursor.close()Recuerden que el print despues del for debe tener 4 espacios de identacion.
💡 Tips
Índices de la Tupla: Es importante saber que
d[0]corresponde a la primera columna de tu tabla (id),d[1]a la segunda (name), y así sucesivamente.Consumo de Memoria: La funcion
fetchall()es excelente para tablas pequeñas, pero si la base de datos tiene miles de registros, es mejor usar un generador ofetchone()para no saturar la RAM.Formateo Moderno: Si usas Python 3.6 o superior, puedes sugerir el uso de f-strings, que son más legibles:
print(f"{d[0]} - {d[1]} {d[2]}")
Codigo Completo
Les dejo un gist con todo el codigo funcional:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import MySQLdb | |
| db = MySQLdb.connect(host="127.0.0.1", user="root",passwd="",db="pyex1") | |
| # ejecutar consultas: insert, update, delete | |
| cursor = db.cursor() | |
| cursor.execute("insert into person(name,lastname) value('Agustin','Ramos')"); | |
| db.commit() | |
| # ejecutar consultas select | |
| cursor = db.cursor() | |
| cursor.execute("select * from person"); | |
| data=cursor.fetchall() | |
| for d in data: | |
| print "{0} – {1} {2}".format(d[0],d[1],d[2]) |
Despues de ejecutar el script en la terminal debe lucir como la siguiente imagen:
Espero este ejemplo les sirva de ayuda, si les sirvio por favor dejenlo en los comentarios.
Les invito atentamente a dejarme en los comentarios propuestas para proximos articulos 🙂
