Programación

Dominar la base de datos SQLite en Python

Dominar la base de datos SQLite en Python

SQLite es un sistema de gestión de bases de datos relacionales basado en el lenguaje SQL; es un motor de base de datos de configuración cero sin servidor. Es uno de los motores de base de datos más populares y muy fácil de usar en pequeñas aplicaciones. Crea solo un archivo de disco para almacenar toda la base de datos, lo que hace que el archivo sea portátil. Se utiliza en el sistema operativo Android como fuente principal para almacenar datos. También lo utiliza Google Chrome para almacenar datos del sitio y datos del usuario, incluidas las contraseñas en la máquina local.

Trabajo avanzado con la base de datos SQLite en Python

En este tutorial, los temas que se cubrirán son: insertar imágenes en una tabla SQLite, enumerar las tablas presentes en una base de datos, identificar los cambios totales desde que la base de datos está conectada, respaldar una base de datos, volcar una base de datos SQLite, deshacer en SQLite, eliminar registros de una tabla, eliminación de una tabla y excepciones de la base de datos SQLite.

Es posible que también desee ver la primera parte de este tutorial, que presenta la conceptos básicos de SQLite, ventajas de usarlo, conectarse a un archivo de base de datos, crear una tabla en la base de datos, insertar datos en la tabla, consultar datos de la tabla, actualizar la tabla y muchos más.

Archivos e imágenes en la base de datos SQLite

Mientras trabaja con bases de datos, hay situaciones en las que necesita insertar imágenes o archivos en una base de datos o exportar desde ella. Por ejemplo, si está creando una base de datos para almacenar los datos de los empleados, es posible que también deba insertar imágenes de cada empleado en la base de datos.

Para agregar imágenes en una base de datos SQLite, necesitamos usar el tipo de datos BLOB de SQLite. El tipo de datos BLOB () se utiliza para almacenar objetos grandes, normalmente archivos grandes como imágenes, música, videos, documentos, PDF, etc. El primer paso es convertir los datos y las imágenes en el objeto byte de Python, que es similar al tipo de datos BLOB de SQLite. Antes de continuar, cree una tabla llamada estudiante en la base de datos con los campos id, nombre, imágenes, marcas. Ejecute el siguiente código para crear la tabla.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") print (" \ n [+] Conectado con éxito a la base de datos ") cur = conn.cursor () print ("\ n [+] El cursor se ha configurado correctamente") table = cur.ejecutar ("" "CREAR TABLA estudiante (id INT PRIMARY KEY, nombre TEXT, imágenes BLOB, marcas TEXT);" "") print ("\ n [+] La tabla se ha creado con éxito") cur.cerrar () conn.commit () conn.cerca()

Este programa creará una nueva tabla con el nombre estudiante. Verá la siguiente salida en el terminal.

Insertar una imagen

Para insertar una imagen en una base de datos SQLite, transforme la imagen en un objeto de byte de Python y luego insértela en la columna de imágenes, que acepta datos BLOB. Ejecute el siguiente código para agregar una imagen img.png en la base de datos usando Python.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") conn.text_factory = str print ("\ n [+] Conectado con éxito a la base de datos") cur = conn.cursor () print ("\ n [+] El cursor se ha configurado correctamente") con open ("img.png "," rb ") como archivo: datos = archivo.read () python_tuple = (101, "robin", data, "90") print ("\ n [+] La imagen se ha importado correctamente") print ("\ n [+] Ahora insertando en la base de datos") cur.ejecutar ("INSERT INTO estudiante (id, nombre, imágenes, marcas) VALORES (?,?,?,?) ", python_tuple) print (" \ n [+] Los datos se han insertado correctamente ") cur.cerrar () conn.commit () conn.cerca()

Este programa insertará la imagen en la base de datos de estudiantes que creó. Verá la siguiente salida.

En el programa anterior, hemos abierto el archivo en modo binario y leemos cada byte y lo almacenamos en variable datos. Luego usamos esa variable en la declaración INSERT para insertar la imagen en la base de datos.

Recuperando una imagen

Para recuperar una imagen de una base de datos, busque la fila usando una declaración de selección y luego acceda a los datos binarios de la imagen en una variable de Python, que se almacenará en un archivo de imagen. Consulte el siguiente código para obtener una ilustración.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") conn.text_factory = str print ("\ n [+] Conectado con éxito a la base de datos") cur = conn.cursor () print ("\ n [+] El cursor se ha configurado correctamente") print ("\ n [+] Recuperando la imagen") cur.ejecutar ("SELECT * FROM student") ret = cur.fetchall () para i en ret: data = i [2] con open ("img2.png "," wb ") como archivo: archivo.escribir (datos) imprimir ("\ n [+] La imagen se ha guardado") cur.cerrar () conn.commit () conn.cerca()

Este sencillo programa recuperará la imagen de la base de datos y la guardará en el disco llamado img2.png. También puede elegir otro nombre para el archivo de imagen. La salida del programa se muestra a continuación.

Enumere todas las tablas de una base de datos

En una base de datos, podemos crear una gran cantidad de tablas. Por lo tanto, también es necesario enumerar todas las tablas presentes en una base de datos. Para enumerar las tablas presentes en una base de datos, consulte la tabla sqlite_master usando la instrucción SELECT de SQL. La sintaxis de la consulta será:

SELECCIONE el nombre de sqlite_master DONDE type = "table"

Así es como usamos esta consulta para enumerar todas las tablas presentes en nuestra base de datos.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") print (" \ n [+] Conectado con éxito a la base de datos ") cur = conn.cursor () print ("\ n [+] El cursor se ha configurado correctamente") cur.ejecutar ("SELECCIONAR nombre de sqlite_master donde tipo =" tabla "") filas = cur.fetchall () imprimir (filas) cur.cerrar () conn.commit () conn.cerca()

El código anterior enumerará todas las tablas presentes en nuestra base de datos. La salida producida por el código cuando se ejecuta es la siguiente. Es posible que vea algún otro resultado dependiendo de las tablas que haya creado en la base de datos.

Identificar los cambios totales desde que se conectó a la base de datos

En cualquier situación, es útil identificar el número de filas que se han modificado, insertado o eliminado desde que se conectó la base de datos. Para eso, use el cambios_total () método del objeto de conexión, que devolverá el número total de filas de la base de datos que se han visto afectadas desde la conexión. Veamos una demostración de ejemplo para saber cómo funciona.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") conn.text_factory = str print ("\ n [+] Conectado con éxito a ambas bases de datos") cur = conn.cursor () print ("\ n [+] Ambos Cursor se han configurado correctamente") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (140, 'David',", 99) ") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (150, 'Sam',", 97) ") changes = conn.total_changes print ("\ n [+] El total de cambios de filas ahora es:", cambios) conn.cometer () cur.cerrar () conn.cerca()

El programa anterior imprimirá el número de cambios de filas en la conexión actual. Verá la siguiente salida.

Revertir en SQLite

Cuando se trata de deshacer algunas tareas, puede usar la función rollback (). Este método se puede utilizar para deshacer la tarea que se ha realizado después de la última confirmación. Consulte el siguiente ejemplo para ver una ilustración.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") conn.text_factory = str print ("\ n [+] Conectado con éxito a ambas bases de datos") cur = conn.cursor () print ("\ n [+] Ambos Cursor se han configurado correctamente") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (100001, 'David',", 99) ") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (100002, 'Sam',", 97) ") conn.commit () print ("\ n [+] La fila Dos se ha insertado correctamente") cur.ejecutar ("SELECT * FROM student") primero = cur.fetchall () print ("\ n [+] Los nuevos registros en la base de datos son:") para i en primero: print (i) cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (10003, 'Kishan',", 100) ") cur.execute ("INSERT INTO student (id, name, images, marks) VALUES (10004, 'Ankit',", 100) ") print (" \ n [+] La fila Dos se ha insertado correctamente pero no se ha confirmado ") conn.rollback () print ("\ n [+] Hemos revertido los comandos anteriores para que no se inserten los nuevos datos") conn.cometer () cur.ejecutar ("SELECT * FROM student") segundo = cur.fetchall () print ("\ n [+] Los nuevos registros en la base de datos son:") para i en segundo: print (i) cur.cerrar () conn.cerca()

En el ejemplo anterior, las dos primeras declaraciones de inserción insertarán los datos como se indica, pero las dos últimas declaraciones de inserción se revertirán para que no agreguen ningún dato a la tabla. La salida será como se muestra a continuación.

Copia de seguridad de una base de datos

Mientras trabaja con la base de datos, es esencial realizar una copia de seguridad de la base de datos. El módulo sqlite3 proporciona una función para realizar la copia de seguridad de la base de datos. Usando el método backup () del objeto de conexión, podemos hacer la copia de seguridad de la base de datos SQLite. La sintaxis básica del método de copia de seguridad es:

copia de seguridad (destino, *, páginas = 0, progreso = Ninguno, nombre = "principal", suspensión = 0.250)

Por defecto, o cuando paginas son ambos 0 o un número entero negativo, toda la base de datos se copia en un solo paso, lo que es preferible para una base de datos pequeña; de lo contrario, el método realiza una copia en bucle hasta paginas en un momento que podría hacerse con la extensa base de datos. La nombre El argumento muestra el nombre de la base de datos que se copiará: debe ser una cadena que contenga el valor predeterminado, para indicar la base de datos principal o para indicar la base de datos temporal. La dormir El argumento especifica el tiempo en segundos para dormir entre los intentos de hacer una copia de seguridad de las páginas restantes. Puede ser un valor entero o de coma flotante.

Hagamos una copia de seguridad del base de datos.db base de datos que hemos estado usando en el tutorial.

importar sqlite3 conn_main = sqlite3.conectar ("muestra.db ") conn_backup = sqlite3.connect ("sample_backup.db ") print (" \ n [+] Conectado con éxito a ambas bases de datos ") cur_main = conn_main.cursor () cur_backup = conn_backup.cursor () print ("\ n [+] Ambos Cursor se han configurado correctamente") conn_main.backup (conn_backup, pages = 0, progress = None, name = "main") print ("La base de datos se ha respaldado correctamente") cur_main.cerrar () cur_backup.cerrar () conn_main.commit () conn_backup.commit () conn_main.cerrar () conn_backup.cerca()

En el código anterior se conectan las dos bases de datos, una es la base de datos de la que queremos hacer una copia de seguridad, y la segunda es la base de datos en la que realizaremos la copia de seguridad. Utilizar el respaldo() método del primer objeto de conexión a la base de datos para realizar una copia de seguridad. Esta función acepta el objeto de conexión de la segunda base de datos como destino para crear una copia de seguridad en la otra base de datos. Utilizar el páginas = 0 argumentos, por lo que el proceso se llevará a cabo en un solo paso, que se recomienda para bases de datos pequeñas. Este programa creará una nueva muestra de nombre de base de datos_respaldo.db y rellénelo con la copia de seguridad de la primera base de datos. Es posible que vea que se ha creado una nueva base de datos en la carpeta actual con el mismo tamaño de archivo que el anterior.

Volcado de una base de datos SQLite

El volcado de bases de datos es una tarea importante. Por lo general, un archivo de volcado es un conjunto de declaraciones SQL para los datos, que generalmente se usa para respaldar. Podemos volcar una base de datos usando el método dump (). Vea el siguiente ejemplo para saber cómo eliminar una base de datos SQLite.

importar sqlite3 con = sqlite3.connect ("base de datos.db ") con open ('dump.sql ',' w ') como f: para línea en con.iterdump (): f.escribir ('% s \ n'% línea)

El programa anterior volcará la muestra de la base de datos.db, y guardará los datos volcados en un archivo llamado dump.sql. Puede ver los datos presentes en el directorio donde están los archivos de Python y abrirlos con cualquier editor de texto.

método executemany () de SQLite3

La ejecutar muchos () El método ejecuta un comando SQL contra todas las secuencias de parámetros o asignaciones que se encuentran en la secuencia seq_of_parameters. Para simplificar, este método se puede utilizar para ejecutar la mayoría de los comandos SQL en una línea. mi.gramo., Podemos insertar cualquier número de filas a través de una lista de Python usando este comando. Consulte el siguiente ejemplo para ver la ilustración.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") print (" \ n [+] Conectado con éxito a la base de datos ") cur = conn.cursor () print ("\ n [+] El cursor se ha configurado correctamente") python_list = [(10000000, 'vivek', ", '10'), (100000001, 'rose',", '21'), (100000002, 'robin', ", '31'), (100000003, 'Dev',", '4'), (100000004, 'michael', ", '52')] cur.executemany ("INSERT INTO student (id, name, images, marks) VALUES (?,?,?,?) ", python_list) print (" \ n [+] Todos los datos se han insertado correctamente ") cur.cerrar () conn.commit () conn.cerca()

El programa anterior insertará todos los datos dados en la lista de Python. La salida producida por el programa se muestra a continuación.

Eliminar registros de una tabla

Podemos usar la operación DELETE para eliminar registros de una tabla. Podemos eliminar rápidamente una fila utilizando la operación DELETE con la cláusula WHERE. La sintaxis básica de la instrucción DELETE es:

BORRAR de nombre_tabla DONDE alguna_condición;

Veamos un ejemplo. Eliminaremos la fila con id 1001 de la tabla de empleados de nuestra base de datos.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") conn.text_factory = str print ("\ n [+] Conectado con éxito a la base de datos") cur = conn.cursor () print ("\ n [+] El cursor se ha configurado correctamente") cur.ejecutar ("ELIMINAR DEL estudiante DONDE id = 1001") imprimir ("\ n [+] La fila se eliminó correctamente") cur.ejecutar ("SELECT * FROM student") data = cur.fetchall () para la fila en los datos: print (fila) cur.cerrar () conn.commit () conn.cerca()

El código anterior eliminará la fila con ID 1001. Puede ver en la devolución de la instrucción SELECT que la fila ha sido eliminada. La salida del programa es como se muestra a continuación.

Suelta una mesa

Podemos eliminar o eliminar rápidamente una tabla usando la declaración SQLite DROP. La sintaxis de la declaración DROP es la que se muestra a continuación:

DROP table nombre_tabla 

Si la tabla no existe, entonces SQLite arrojará un error, por lo que para evitar esto, podemos usar el si existe etiqueta con la declaración DROP. Vea la siguiente sintaxis:

DROP table si existe table_name

Veamos cómo podemos usar esta declaración con Python sqlite3 módulo para eliminar una tabla. En este programa, eliminaremos el estudiante tabla que hemos creado anteriormente.

importar sqlite3 conn = sqlite3.conectar ("muestra.db ") conn.text_factory = str print ("\ n [+] Conectado con éxito a la base de datos") cur = conn.cursor () print ("\ n [+] El cursor se ha configurado correctamente") cur.ejecutar ("SOLTAR TABLA SI EXISTE estudiante") imprimir ("\ n [+] La tabla se colocó correctamente") cur.cerrar () conn.commit () conn.cerca()

El programa anterior eliminará la tabla estudiante desde el muestra base de datos. Podemos usar el comando list table que hemos visto anteriormente para ver si la tabla se elimina. La salida del programa es como se muestra a continuación.

Excepciones de la base de datos SQLite

Algunas excepciones de la base de datos SQLite pueden surgir debido a algún error. Veamos un poco de cuándo surgieron esos errores.

Esta es la lista de todas las excepciones de SQLite; podemos manejar esas excepciones en nuestros programas usando el método básico de manejo de errores try / except de Python.

Conclusión

Eso nos lleva al final de la guía completa sobre métodos avanzados para trabajar con SQLite usando Python. Espero que hayas aprendido todos los aspectos de SQLite3 usando Python, lo que nos ayudará a construir fantásticos proyectos de Python.

Los mejores juegos para jugar con el seguimiento de manos
Oculus Quest presentó recientemente la gran idea del seguimiento manual sin controladores. Con un número cada vez mayor de juegos y actividades que ej...
Cómo mostrar la superposición de OSD en aplicaciones y juegos de Linux en pantalla completa
Jugar juegos en pantalla completa o usar aplicaciones en modo de pantalla completa sin distracciones puede aislarlo de la información relevante del si...
Las 5 mejores cartas de captura de juegos
Todos hemos visto y amado la transmisión de juegos en YouTube. PewDiePie, Jakesepticye y Markiplier son solo algunos de los mejores jugadores que han ...