domingo, 14 de febrero de 2010

MySQL y Python - Relación de pura potencia y 2

Continuamos viendo formas de obtener datos...

2) Utilizando el método fetchone. Mediante este método del objeto cursor se pueden obtener y mostrar filas una a una, en vez de todas a la vez (lo que ocurría con fetchall). Veamos el siguiente ejemplo:


# Importamos módulo
import MySQLdb

# Intentamos conectar con la base de datos.
try:
conexion = MySQLdb.connect(host = "localhost", \
user = "root", passwd = "1234",db = "pruebas_python")
print "Conexión realizada"
except:
print "Error en conexión"

# Creamos cursor a partir de la conexión realizada.
cursor = conexion.cursor()

# Ejecutamos sentencia SQL.
cursor.execute("SELECT * FROM cliente")

# Obtenemos el número de filas del resultado de hacer la consulta select.
numero_filas = int(cursor.rowcount)

# Obtenemos y mostramos una fila a la vez (en cada iteración).
for fila in range(0,numero_filas):
fila = cursor.fetchone()
print str(fila[0]), " - " , str(fila[1]).strip(), " (", str(fila[2]).strip(), ")"
El método rowcount() del objeto cursor se utiliza para obtener el número de filas del resultado de hacer la consulta SQL. Este número se utiliza en un bucle for para iterar sobre el resultado, mediante el método fetchone. Con este método nos movemos a través del conjunto de filas resultado, de manera que podemos visualizar el contenido de cada fila, en cada iteración.

3) Utilizando el método fetchmany. Mediante este método podemos obtener un subconjunto del conjunto resultado de una consulta. Podemos especificar el tamaño de las filas que queremos que se nos devuelvan como resultado. Véamoslo con el siguiente ejemplo.

# Ejecutamos sentencia SQL.
cursor.execute("SELECT * FROM cliente")

# Limitamos el resultado de la consulta a 5 filas del total.
ret = cursor.fetchmany(5)

# Iteramos sobre el resultado devuelto.
for fila in ret
print str(fila[0]), " - " , str(fila[1]).strip(), " (", str(fila[2]).strip(), ")"
En consecuencia nos devuelve únicamente las primeras 5 filas que encuentre la sentencia select definida en el método execute.

4) Mediante el método scroll. Con este método podemos movernos dentro del conjunto de filas resultado del cursor, dando una nueva posición a partir de la cual devolver información. Hay dos tipos de modo de funcionamiento, mediante desplazamiento relativo (relative) a la posición actual en el conjunto de filas resultado y desplazamiento absoluto (absolute), si la posición de las filas tiene un valor absoluto. Por defecto el método scroll tiene modo de funcionamiento "relative". Esto hay que verlo en un ejemplo, que es muy complicado explicarlo:

# Ejecutamos sentencia SQL.

cursor.execute("SELECT * FROM cliente")

# Obtenemos y mostramos la cuarta fila directamente.

ret = cursor.scroll(3)
ret = cursor.fetchone()
print ret

# Avanzamos una posición relativa, y vamos a la sexta fila. Darse cuenta que
# aquí no iríamos a la quinta fila, ya que el último fetchone mueve una
# posición dentro del cursor.

ret = cursor.scroll(1)
ret = cursor.fetchone()
print ret

# Avanzamos una posición relativa, visualizamos la octava fila.

ret = cursor.scroll(1)
ret = cursor.fetchone()
print ret

# Retrasamos una posición el cursor, visualizando de nuevo la octava fila.
# Darse cuenta que el último fetchone nos deja en la novena fila. Lo que
# hacemos mediante el método scroll aquí es decirle que retrase una posición
# (-1) dentro del cursor.

ret = cursor.scroll(-1)
ret = cursor.fetchone()
print ret

# Visualizamos mediante una posición absoluta la fila número 12. Aquí ya no
# existen los desplazamientos relativos a una posición dada del cursor. Aquí
# el desplazamiento es absoluto respecto del origen (la posición de la primera
# fila).

ret = cursor.scroll(11,'absolute')
ret = cursor.fetchone()
print ret
Como resultado este código daría lo siguiente:

(4L, 'Mar\xeda', 'La Uni\xf3n')
(6L, 'Ana', 'Murcia')
(8L, 'Emilia', 'El Llano del Beal')
(8L, 'Emilia', 'El Llano del Beal')
(12L, 'Gabriela', 'Barcelona')

No hay comentarios:

Publicar un comentario