Creación de una tabla en una base de datos

Las bases de datos necesitan una estructura más definida que las listas o diccionarios de Python.

SQLite en realidad permite cierta flexibilidad respecto al tipo de dato que se almacena en cada columna, pero en este capítulo nosotros vamos a mantener los tipos de datos estrictos, para que los conceptos que aprendamos puedan ser igualmente aplicados a otras bases de datos como MySQL.

Cuando creamos una tabla, debemos indicar de antemano a la base de datos los nombres de cada una de las columnas de esa tabla y el tipo de dato que se va a almacenar en cada una de ellas. Cuando el software de la base de datos conoce el tipo de dato de cada columna, puede elegir el modo más eficiente de almacenar y buscar en ellas, basándose en el tipo de dato que contendrán.

Puedes revisar los distintos tipos de datos soportados por SQLite en la siguiente dirección http://www.sqlite.org/datatypes.html.

El tener que definir de antemano una estructura para los datos puede parecer incómodo al principio, pero la recompensa consiste en obtener un acceso rápido a los datos, incluso cuando la base de datos contiene una gran cantidad de ellos.

Vamos a crear una tabla llamada Canciones que tendrá dos columnas de la manera siguiente:

La operación connect realiza una conexión con la base de datos almacenada en el archivo musica.sqlite en el directorio actual. Si el archivo no existe, se creará uno nuevo.

La razón de que se le llame una “conexión” es que a veces la base de datos se almacena en un “servidor de bases de datos”, distinto del servidor en el cual está funcionando nuestra aplicación. En nuestros ejemplos, dado que son sencillos, la base de datos será simplemente un archivo local en el mismo directorio en el que está funcionando el código de Python.

Un cursor es como un manejador de archivos, y se puede usar para realizar operaciones en los datos almacenados en la base de datos. La llamada a cursor()
es muy similar conceptualmente a la llamada open() cuando se está tratando con
archivos de texto.

Una vez que tenemos el cursor, podemos comenzar a ejecutar comandos sobre el contenido de la base de datos, usando el método execute().

Los comandos de las bases de datos se expresan en un lenguaje especial que ha sido estandarizado entre varios proveedores de bases de datos diferentes para permitirnos aprender un único lenguaje para todas ellas. Este lenguaje recibe el nombre de Lenguaje de Consultas Estructurado (Structured Query Language), o SQL.

En nuestro ejemplo, estamos ejecutando dos comandos SQL sobre la base de datos. Por convención, mostraremos las palabras claves de SQL en mayúscula y las partes de los comandos que añadamos nosotros (como los nombres de las tablas y las columnas) irán en minúsculas.

El primer comando SQL elimina la tabla Canciones si ya existe. Este
planteamiento se utiliza simplemente para permitirnos ejecutar el mismo programa para crear la tabla Canciones una y otra vez sin provocar un error.
Observa que el comando DROP TABLE elimina la tabla y todo su contenido de la
base de datos (es decir, aquí no existe la opción “deshacer”).

El segundo comando crea una tabla llamada Canciones con una columna de texto llamada titulo y una columna de enteros llamada reproducciones.

Ahora que ya hemos creado la tabla llamada Canciones, podemos guardar algunos datos en ella usando la operación de SQL INSERT. Empezaremos realizando otra vez una conexión con la base de datos y obteniendo el cursor. Luego podemos ejecutar comandos SQL usando ese cursor.

El comando INSERT de SQL indica qué tabla se está utilizando y luego define una fila nueva, enumerando los campos que se desean incluir (titulo, reproducciones) seguidos por los valores (VALUES) que queremos colocar en esa
fila. Nosotros vamos a especificar los valores como signos de interrogación (?, ?)
para indicarle que los valores reales serán pasados como una tupla ( ‘My Way’,
15
) en el segundo parámetro de la llamada a execute().

Primero insertamos (INSERT) dos filas en la tabla y usamos commit() para forzar a que los datos sean escritos en el archivo de la base de datos.

Columnas en una tabla

Después usamos el comando SELECT para recuperar las filas que acabamos de insertar en la tabla. En el comando SELECT, indicamos qué columnas nos gustaría obtener (titulo, reproducciones), y también desde qué tabla queremos recuperar los datos. Después de ejecutar la sentencia SELECT, el cursor se convierte en algo con lo que podemos iterar mediante una sentencia for. Por eficiencia, el cursor no lee todos los datos de la base de datos cuando se ejecuta la sentencia SELECT. En lugar de ello, los datos van siendo leídos a medida que se van pidiendo las filas desde el bucle creado con la sentencia for.

La salida del programa es la siguiente:

Nuestro bucle for encuentra dos filas, y cada fila es una tupla de Python cuyo
primer valor es el titulo y el segundo es el número de reproducciones.

Puede que veas cadenas comenzando con u’ en otros libros o en Internet. Esto es una indicación de Python 2 que dice que las cadenas son cadenas Unicode que son capaces de almacenar caracteres no-latinos. En Python 3, todas las cadenas son del tipo Unicode por defecto.

Al final del programa, ejecutamos un comando SQL para borrar (DELETE) los archivos que acabamos de crear, de modo que podamos ejecutar el programa una y otra vez. El comando DELETE nos muestra el uso de la cláusula WHERE, la cual nos permite expresar un criterio de selección, de modo que podemos pedir a la base de datos que aplique el comando solamente a las filas que cumplan ese criterio. En este ejemplo, el criterio es cumplido por todas las filas, así que vaciamos la tabla para que podamos ejecutar el programa de nuevo repetidamente. Después de que se ha realizado el DELETE, llamamos de nuevo a commit() para forzar a los datos a ser eliminados de la base de datos.