Guia Conectar Python y MySQL

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 o fetchone() 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:


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])

view raw

pyex1.py

hosted with ❤ by GitHub

Despues de ejecutar el script en la terminal debe lucir como la siguiente imagen:

Screenshot at 2016-07-28 22-43-12

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 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Evilnapsis

Subscribe now to keep reading and get access to the full archive.

Continue reading