jueves, 2 de octubre de 2014

Tutorial de Python parte 26 - Módulo sqlite3. Crear bases de datos, tablas e insertar datos





En esta parte del tutorial nos centraremos en ver aspectos básicos para trabajar con bases de datos sqlite3, para ello Python nos ofrece un módulo llamado sqlite3.

Este tipo de base de datos es muy popular y totalmente válida y eficiente para cualquier tipo de proyectos, basados en la web o aplicaciones de escritorio.

Para trabajar con sqlite3 es requisito tener al menos unos conceptos básicos del lenguaje SQL.

Para poder utilizar sqlite3 necesitamos importarlo ...


import sqlite3


En el capítulo del vídeo tutorial se muestra como crear una base de datos sqlite3, simplemente creas un archivo, con extensión: .db .sqlite o .sqlite3, por ejemplo, test.sqlite3. Desde este mismo instante ya tienes disponible una base de datos sqlite3 disponible para trabajar con ella.

Esta base de datos está vacía, ahora lo lógico es ir creando las tablas, para ello lo primero que haremos es establecer una conexión a la base de datos ...

import sqlite3
#Conectar a la base de datos
conexion = sqlite3.connect("test.sqlite3")

Lo siguiente es seleccionar el cursor para poder realizar una consulta ...


import sqlite3
#Conectar a la base de datos
conexion = sqlite3.connect("test.sqlite3")
#Seleccionar el cursor para realizar la consulta
consulta = conexion.cursor()


Preparar la consulta sql, por ejemplo como la base de datos test.sqlite3 está vacía, lo lógico es agregarle alguna tabla, en una variable guardar la consulta SQL ...

import sqlite3
#Conectar a la base de datos
conexion = sqlite3.connect("test.sqlite3")
#Seleccionar el cursor para realizar la consulta
consulta = conexion.cursor()
#String con la consulta para crear la tabla
sql = """CREATE TABLE IF NOT EXISTS test( 
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
cadena_texto VARCHAR(50) NOT NULL,
entero INTEGER NOT NULL,
decimal FLOAT NOT NULL,
fecha DATE NOT NULL)
"""


La siguiente fase es generar la consulta a través del método execute(sql) y cerrarla con el método close() ...


import sqlite3
#Conectar a la base de datos
conexion = sqlite3.connect("test.sqlite3")
#Seleccionar el cursor para realizar la consulta
consulta = conexion.cursor()
#String con la consulta para crear la tabla
sql = """CREATE TABLE IF NOT EXISTS test( 
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
cadena_texto VARCHAR(50) NOT NULL,
entero INTEGER NOT NULL,
decimal FLOAT NOT NULL,
fecha DATE NOT NULL)
"""
#Ejecutamos la consulta
if (consulta.execute(sql)):
 print("Tabla creada con éxito")
else: print("Ha ocurrido un error al crear la tabla")
#Cerramos la consulta
consulta.close()


Finalemente guardamos los cambios en la base de datos con commit() y cerramos la conexión a la base de datos con close() ...

#IMPORTANTE codificar el script en UTF-8
import sqlite3
#Conectar a la base de datos
conexion = sqlite3.connect("test.sqlite3")
#Seleccionar el cursor para realizar la consulta
consulta = conexion.cursor()
#String con la consulta para crear la tabla
sql = """CREATE TABLE IF NOT EXISTS test( 
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
cadena_texto VARCHAR(50) NOT NULL,
entero INTEGER NOT NULL,
decimal FLOAT NOT NULL,
fecha DATE NOT NULL)
"""
#Ejecutamos la consulta
if (consulta.execute(sql)):
 print("Tabla creada con éxito")
else: print("Ha ocurrido un error al crear la tabla")
#Cerramos la consulta
consulta.close()
#Guardamos los cambios
conexion.commit()
#Cerramos la conexión
conexion.close()


Si ahora ejecutas este escript la tabla se creará en la base de datos test.sqlite3.

En el capítulo del vídeo tutorial, se muestra paso a paso cada proceso a seguir, desde crear la base de datos, crear la tabla como hemos visto en el ejemplo anterior y también como insertar registros en la tabla.

Archivos del capítulo del vídeo tutorial:

crear-tabla.py

#IMPORTANTE convertir el script a la codificación UTF-8
import sqlite3

#Conectamos a la base de datos
conexion = sqlite3.connect("sqlite3/test.sqlite3")

#Seleccionamos el cursor para realizar la consulta
consulta = conexion.cursor()

#String con la consulta para crear la tabla
sql = """CREATE TABLE IF NOT EXISTS test( 
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
cadena_texto VARCHAR(50) NOT NULL,
entero INTEGER NOT NULL,
decimal FLOAT NOT NULL,
fecha DATE NOT NULL)
"""

#Ejecutamos la consulta
if (consulta.execute(sql)):
 print("Tabla creada con éxito")
else: print("Ha ocurrido un error al crear la tabla")

#Cerramos la consulta
consulta.close()

#Guardamos los cambios
conexion.commit()

#Cerramos la conexión
conexion.close()


insertar-datos.py

#IMPORTANTE convertir el script a la codificación UTF-8
import sqlite3, datetime

print ("**** Programa para insertar datos en bases de datos sqlite3 ****")

cadena_texto = input("Introduzca una cadena de texto: ")
entero = input("Introduzca un número entero: ")
decimal = input("Introduzca un número decimal: ")

#Capturar excepciones para los números enteros y decimal
#Sólo números enteros
try:
 entero = int(entero)
except ValueError:
 print(entero, "no es un número entero")
 exit()
 
#Sólo numeros decimales
try: 
 decimal = float(decimal) or int(decimal)
except ValueError:
 print(decimal, "no es un número decimal")
 exit()

#Establecer la conexión
conexion = sqlite3.connect("sqlite3/test.sqlite3")

#Seleccionar el cursor para iniciar una consulta
consulta = conexion.cursor()

#Valor de los argumentos
argumentos = (cadena_texto, entero, decimal, datetime.date.today())

#consulta SQL con argumentos ?, ?, ?, ?
sql = """INSERT INTO test(cadena_texto, entero, decimal, fecha)
VALUES (?, ?, ?, ?)"""

#Realizar la consulta
if (consulta.execute(sql, argumentos)):
 print("Registro guardado con éxito")
else: print("Ha ocurrido un error al guardar los datos")
 
#Cerrar la consulta
consulta.close()

#Guardar los cambios en la base de datos
conexion.commit()

#Cerrar la conexión
conexion.close()