jueves, 2 de octubre de 2014

Tutorial de Python parte 27 - Módulo sqlite3. Seleccionar registros de las tablas




En este capítulo se muestran distintas formas de extraer filas de las tablas a través de consultas select, desde seleccionar todos los registros, a seleccionar un sólo registro o seleccionar registros entre un rango con BETWEEN, la extracción de filas se hará de la tabla test que fue creada en el capítulo anterior.

Por defecto el cursor de sqlite3 permite extraer el valor de los campos accediendo de forma indexada a las columnas, aunque también se muestra un ejemplo de como acceder a los campos  a través de la clave (nombre de la columna) o mejor dicho en forma de diccionario, este ejemplo se encuentra en el script seleccionar-datos-clave.py.

Más información sobre el módulo sqlite3

Código del capítulo del vídeo tutorial ...

seleccionar-datos.py


#IMPORTANTE codificar el script en UTF-8
import sqlite3

conexion = sqlite3.connect("sqlite3/test.sqlite3")

consulta = conexion.cursor()

#Extrayendo todas las filas
sql = "SELECT * FROM test"
if (consulta.execute(sql)):
 filas = consulta.fetchall()
 for fila in filas:
  print(fila[0], fila[1], fila[2], fila[3], fila[4])
 

#Extrayendo una sola fila
sql = "SELECT * FROM test WHERE id=%s" % 2
consulta.execute(sql)
fila = consulta.fetchone()
print("Seleccionando del registro con id 2:", fila[0], fila[1], fila[2], fila[3], fila[4])

argumentos = (2, 3)
#Extrayendo entre un rango con BETWEEN
sql = "SELECT * FROM test WHERE id BETWEEN ? AND ?"
consulta.execute(sql, argumentos)
filas = consulta.fetchall()

print("Mostrando filas con BETWEEN")
for fila in filas:
 print(fila[0], fila[1], fila[2], fila[3], fila[4])
 
consulta.close()

conexion.commit()
conexion.close()


seleccionar-datos-clave.py

#IMPORTANTE codificar el script en UTF-8
import sqlite3

def dict_factory(cursor, row):
    d = {}
    for idx, col in enumerate(cursor.description):
        d[col[0]] = row[idx]
    return d
 
conexion = sqlite3.connect("sqlite3/test.sqlite3")
conexion.row_factory = dict_factory
consulta = conexion.cursor()

sql = "SELECT * FROM test"
consulta.execute(sql)
filas = consulta.fetchall()

for fila in filas:
 print(fila["cadena_texto"], fila["entero"], fila["decimal"], fila["fecha"])