Python y MySQL

De ChuWiki

Para usar MySQL con Python necesitamos previamente descargarnos e instalar el módulo MySQL for Phyton


Vamos a ver los pasos necesarios para establecer la conexión con MySQL desde Python para realizar una consulta a la base de datos y ver los resultados.

Establecemos la conexión con MySQL[editar]

El siguiente trozo de código Python' establece la conexión con la base de datos MySQL

# import de MySQLdb
import MySQLdb

# Se establece la conexión
db=MySQLdb.connect(host='server_bd',user='user_bd', passwd='passwd_bd',db='database_bd')

Obtención de un cursor para ejecutar las SQL[editar]

Debemos obtener ahora un cursor para la realización de la consulta. Podemos hacerlo de dos formas, según cómo queramos acceder a los resultados. Si usamos esta opción

 cursor=db.cursor()

sin parámetros, se nos devolverán los resultados de la consulta como una tupla de tuplas, por lo que accederemos a los resultados de la consulta usando índices, como si fueran arrays. Sin embargo, si usamos esta otra opción

 cursor = conn.cursor(MySQLdb.cursor.DictCursor)

obtendremos como resultado una tupla de "Diccionarios", por lo que podremos acceder a cada uno de los resultados usando el nombre de la columna en vez de un número de índice

Hacer un SELECT y leer los resultados de la consulta[editar]

Una vez obtenido el cursor, podemos realizar la consulta de la siguiente manera

 cursor.execute('select * from una_tabla')

Para obtener los resultados, podemos ahora llamar al método fetchone() o fetchall() de cursor. El primero nos devuelve una de las filas de resultados y en sucesivas llamadas nos irá devolviendo el resto. Devolverá None cuando ya no hay más resultados. El segundo, fetchall(), devuelve todas las filas de golpe.

Debemos elegir uno u otro según qué queramos hacer con los resultados:

  • Si no son muchos y queremos mantenerlos todos en memoria para trabajar con ellos, podemos usar fetchall().
  • Si hay más resultados que la memoria que tenemos disponible o si sólo queremos ir leyéndolos para hacer algo con ellos e ir descartando de memoria (por ejemplo, ir copiando los resultados a un fichero), podemos usar fetchone().

El siguiente trozo de código python recoge los resultados usando un bucle y fetchone().

# Bucle para recoger los resultados, de uno en uno.
# cursor.fetchone() nos devuelve el siguiente registro disponible
registro = cursor.fetchone()
while (registro != None):
   print (registro)
   registro = cursor.fetchone()

mientras que el siguiente, lo hace usando fetchall() para obtener todos los resultados de golpe. Luego realiza el bucle para ir recorriendo los resultados ya obtenidos y sacándolos por pantalla.

resultados = cursor.fetchall()
for registro in resultados:
   print (registro)

Una vez obtenido un registro concreto, los campos se obtienen de la tupla usando índices o nombres de columna, según hayamos obtenido el cursor, según indicábamos anteriormente, en el punto de "obtener el cursor".

En el siguiente trozo de código se usan índices para escribir todas las columnas de los registros

registro = cursor.fetchone()
while (registro != None):
    for i in range(len(registro)):
       print registro[i],
    print
    registro = cursor.fetchone()

mientras que en este otro se usan los nombres de columnas

registro = cursor.fetchone()
while (registro != None):
   print registro['nombre_columna_1'],
   ...
   print registro['nombre_columna_n']
   registro = cursor.fetchone()

La llamada a cursor.execute() nos devuelve el número de resultados en la consulta

 numeroResultados = cursor.execute ('select * from una_tabla')

INSERT, DELETE y UPDATE[editar]

Para las llamadas a INSERT, DELETE y UPDATE se hace exactamente lo mismo que para un SELECT

numeroRegistrosAfectados = cursor.execute('insert into una_tabla values(a,b,c)')

La llamada devuelve el número de filas insertadas, borradas o modificadas.

Enlaces[editar]