Cómo usar el módulo SQLITE3 en Python 3

El autor seleccionó el fondo de alivio COVID-19 para recibir una donación como parte del Programa Escribir para donaciones.

Introducción

SQLite es una base de datos SQL autónoma basada en archivos. SQLite viene incluido con Python y se puede usar en cualquiera de sus aplicaciones Python sin tener que instalar ningún software adicional.

en este tutorial, veremos el módulo sqlite3 en Python 3., Vamos a crear una conexión a una base de datos SQLite, agregar una tabla a la base de datos, insertar datos en la tabla, y leer y modificar los datos en la tabla.

para este tutorial, trabajaremos principalmente con un inventario de peces que necesitamos modificar a medida que los peces se agregan o eliminan de un acuario ficticio.

prerequisitos

para aprovechar al máximo este tutorial, se recomienda tener cierta familiaridad con la programación en Python y algunos antecedentes básicos con SQL.,

Puede revisar estos tutoriales para obtener la información de fondo necesaria:

  • Cómo codificar en Python3
  • Una Introducción a las consultas en MySQL

Paso 1 — Crear una conexión a una base de datos SQLite

Cuando nos conectamos a una base de datos SQLite, estamos accediendo a datos que finalmente residen en un archivo en nuestro equipo. Las bases de datos SQLite son motores SQL con todas las funciones que se pueden usar para muchos propósitos. Por ahora, consideraremos una base de datos que rastrea el inventario de peces en un acuario ficticio.,

podemos conectarnos a una base de datos SQLite usando el módulo Python sqlite3:

import sqlite3connection = sqlite3.connect("aquarium.db")

import sqlite3 le da a nuestro programa Python acceso al módulo sqlite3. La función sqlite3.connect() devuelve un objeto Connection que usaremos para interactuar con la base de datos SQLite contenida en el archivo aquarium.db. El aquarium.db archivo es creado automáticamente por sqlite3.connect() si aquarium.db ya no existe en nuestro ordenador.,

podemos verificar que hemos creado correctamente nuestro objeto connection ejecutando:

print(connection.total_changes)

si ejecutamos este código Python, veremos una salida como:

Output
0

connection.total_changes es el número total de filas de la base de datos que se han cambiado por connection. Como aún no hemos ejecutado ningún comando SQL, 0 total_changes es correcto.

si, en cualquier momento, nos encontramos con que queremos iniciar este tutorial de nuevo, podemos eliminar el archivo aquarium.db de nuestro equipo.,

Nota: También es posible conectarse a una base de datos SQLite que reside estrictamente en la memoria (y no en un archivo) pasando la cadena especial ":memory:" En sqlite3.connect(). Por ejemplo, sqlite3.connect(":memory:"). Una base de datos ":memory:" SQLite desaparecerá tan pronto como su programa Python salga. Esto podría ser conveniente si desea un sandbox temporal para probar algo en SQLite, y no necesita persistir ningún dato después de que su programa salga.,

Paso 2-Agregar datos a la base de datos SQLite

ahora que nos hemos conectado a la base de datos SQLite aquarium.db, podemos comenzar a insertar y leer datos de ella.

en una base de datos SQL, los datos se almacenan en tablas. Las tablas definen un conjunto de columnas y contienen 0 o más filas con datos para cada una de las columnas definidas., una tabla de nombre fish que las pistas de los siguientes datos:

nombre especies tank_number
Sammy tiburón 1
Jamie sepia 7

El fish tabla de seguimiento de un valor de name, species y tank_number para cada uno de los peces en el acuario., Two example fish rows are listed: one row for a shark named Sammy, and one row for a cuttlefish named Jamie.

We can create this fish table in SQLite using the connection we made in Step 1:

cursor = connection.cursor()cursor.execute("CREATE TABLE fish (name TEXT, species TEXT, tank_number INTEGER)")

connection.cursor() returns a Cursor object. Cursor objects allow us to send SQL statements to a SQLite database using cursor.execute()., El "CREATE TABLE fish ..." string es una instrucción SQL que crea una tabla con el nombre fish con las tres columnas descritas anteriormente: name de tipo TEXT, especies de tipo TEXT, y tank_number de tipo INTEGER.,

Ahora que hemos creado una tabla, podemos insertar filas de datos en él:

cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")

llamamos cursor.execute() dos veces: una vez para insertar una fila para el tiburón Sammy en el tanque 1, y de una vez para insertar una fila para la sepia Jamie en el tanque 7. "INSERT INTO fish VALUES ..." es una instrucción SQL que nos permite agregar filas a una tabla.,

en la siguiente sección, usaremos una instrucción SQL SELECT para inspeccionar las filas que acabamos de insertar en nuestra tabla fish.

Paso 3-lectura de datos de la base de datos SQLite

en El Paso 2, agregamos dos filas a una tabla SQLite llamada fish., Podemos recuperar las filas usando un SELECT instrucción SQL:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Si ejecutamos este código, vamos a ver una salida como la siguiente:

Output

El cursor.execute() función se ejecuta un SELECT instrucción para recuperar los valores de la etiqueta name, species, y tank_number columnas en el fish tabla. fetchall() recupera todos los resultados de la etiqueta SELECT declaración., Cuando print(rows) vemos una lista de dos tuplas. Cada tupla tiene tres entradas; una entrada para cada columna que seleccionamos de la tabla fish. Los dos tuplas tienen los datos que hemos insertado en el Paso 2: una tupla de Sammy shark, y una tupla de Jamie cuttlefish.,

si queremos recuperar filas en la tabla fish que coincidan con un conjunto específico de criterios, podemos usar una cláusula WHERE:

si ejecutamos esto, veremos una salida como la siguiente:

Output

Al igual que con ejemplo anterior, cursor.execute(<SQL statement>).fetchall() nos permite obtener todos los resultados de una instrucción SELECT. El WHERE cláusula en el SELECT declaración de filtros para las filas donde el valor de name es target_fish_name., Observe que utilizamos ? para sustituir nuestro target_fish_name variable en el SELECT declaración. Esperamos que solo coincida con una fila, y de hecho solo vemos la fila para Jamie el cuttlefish devuelto.

ADVERTENCIA: Nunca use operaciones de cadena de Python para crear dinámicamente una cadena de instrucción SQL. El uso de operaciones de cadena de Python para ensamblar una cadena de instrucción SQL le deja vulnerable a los ataques de inyección SQL. Los ataques de inyección SQL se pueden usar para robar, alterar o modificar los datos almacenados en su base de datos., Utilice siempre el marcador de posición ? en sus instrucciones SQL para sustituir dinámicamente los valores de su programa Python. Pase una tupla de valores como segundo argumento a Cursor.execute() para vincular sus valores a la instrucción SQL. Este patrón de sustitución se demuestra aquí y en otras partes de este tutorial también.

Paso 4-modificar los datos en la base de datos SQLite

Las filas en una base de datos SQLite se pueden modificar utilizandoUPDATE yDELETE instrucciones SQL.,

digamos, por ejemplo, que Sammy el tiburón fue trasladado al tanque número 2. Podemos cambiar Sammy fila en el fish tabla para reflejar este cambio:

emitimos un UPDATE instrucción SQL para cambiar el tank_number de Sammy a su nuevo valor de 2. El WHERE cláusula en el UPDATE declaración asegura que sólo cambia el valor de tank_number si una fila tiene name = "Sammy".,

Si ejecutamos el siguiente código SELECT declaración, podemos confirmar nuestra actualización se ha realizado correctamente:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Si ejecutamos esto, vamos a ver una salida como la siguiente:

Output

Observe que la fila para Sammy ahora tiene el valor de 2 su tank_number columna.

digamos que Sammy el tiburón fue liberado en la naturaleza y ya no está en el acuario., Dado que Sammy ya no vive en el acuario, tendría sentido eliminar la fila Sammy de la tabla fish.

el Tema de un DELETE instrucción SQL para eliminar una fila:

released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))

la emisión de un DELETE instrucción SQL para eliminar la fila para Sammy shark. El WHERE cláusula en el DELETE declaración asegura que sólo eliminar una fila si esa fila tiene name = "Sammy".,

Si ejecutamos el siguiente código SELECT declaración, podemos confirmar nuestra se realizó la eliminación correctamente:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Si ejecutamos este código, vamos a ver una salida como la siguiente:

Output

Observe que la fila para Sammy shark ahora ha desaparecido, y sólo Jamie cuttlefish sigue.,

Paso 5-Usando con instrucciones para limpieza automática

en este tutorial, hemos utilizado dos objetos primarios para interactuar con la base de datos "aquarium.db" SQLite: a Connection objeto llamado connection, y a Cursor objeto llamado cursor.

de la misma manera que los archivos Python deben cerrarse cuando terminemos de trabajar con ellos, Connection y Cursor los objetos también deben cerrarse cuando ya no sean necesarios.,

se puede usar un with instrucción para ayudarnos a cerrar automáticamente Connection y Cursor objetos:

closing es una función de confort proporcionado por el contextlib módulo. Cuando un with declaración de salidas, closing hace close() se llama en cualquier objeto que se le pasa. La función closing se usa dos veces en este ejemplo., Una vez para asegurarse de que el Connection objeto devuelto por sqlite3.connect() se cierra automáticamente, y una segunda vez para asegurarse de que el Cursor objeto devuelto por connection.cursor() se cierra automáticamente.,

Si ejecutamos este código, vamos a ver una salida como la siguiente:

Output

Desde "SELECT 1" es una instrucción SQL que siempre devuelve una sola fila con una columna con un valor de 1, tiene sentido ver una sola tupla con la etiqueta 1 como su único valor devuelto por nuestro código.

conclusión

el módulosqlite3 es una parte poderosa de la biblioteca estándar de Python; nos permite trabajar con una base de datos SQL en disco con todas las funciones sin instalar ningún software adicional.,

en este tutorial, aprendimos cómo usar el módulo sqlite3 para conectarse a una base de datos SQLite, agregar datos a esa base de datos, así como leer y modificar datos en esa base de datos. En el camino, también aprendimos sobre los riesgos de los ataques de inyección SQL y cómo usar contextlib.closing para llamar automáticamente close() en objetos Python en with instrucciones.

desde aquí podemos aprender más acerca de las bases de datos SQL en SQLite vs MySQL vs PostgreSQL: a Comparison of Relational Database Management Systems.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir a la barra de herramientas