en este tutorial, trabajaremos con la base de datos SQLite3 mediante programación usando Python.
SQLite en general es una base de datos sin servidor que puede usar dentro de casi todos los lenguajes de programación, incluido Python. Sin servidor significa que no hay necesidad de instalar un servidor separado para trabajar con SQLite para que pueda conectarse directamente con la base de datos.
SQLite es una base de datos ligera que puede proporcionar un sistema de gestión de bases de datos relacionales con configuración cero porque no hay necesidad de configurar o configurar nada para usarlo.,
usaremos SQLite versión 3 o SQLite3, así que comencemos.
tabla de contenidos
Create Connection
para usar sqlite3 en Python, en primer lugar, deberá importar el módulo sqlite3 y luego crear un objeto de conexión que nos conectará a la base de datos y nos permitirá ejecutar las instrucciones SQL.
Puede un objeto de conexión usando la función connect ():
import sqlite3con = sqlite3.connect('mydatabase.db')
que creará un nuevo archivo con el nombre ‘mydatabase.db’.,
Cursor sqlite3
para ejecutar sentencias SQLite en Python, necesita un objeto cursor. Puedes crearlo usando el método cursor ().
el cursor SQLite3 es un método del objeto de conexión. Para ejecutar las sentencias SQLite3, primero debe establecer una conexión y luego crear un objeto del cursor usando el objeto de conexión de la siguiente manera:
con = sqlite3.connect('mydatabase.db')cursorObj = con.cursor()
ahora podemos usar el objeto cursor para llamar al método execute() para ejecutar cualquier consulta SQL.,
Crear base de datos
al crear una conexión con SQLite, se creará un archivo de base de datos automáticamente si aún no existe. Este archivo de base de datos se crea en disco; también podemos crear una base de datos en RAM usando: memory: con la función connect. Esta base de datos se denomina base de datos en memoria.
considere el siguiente código en el que hemos creado una base de datos con un intento, excepto y finalmente bloques para manejar cualquier excepción:
primero, Importamos el módulo sqlite3, luego definimos una función sql_connection., Dentro de esta función, tenemos un bloque try donde la función connect() devuelve un objeto de conexión después de establecer la conexión.
entonces tenemos excepto bloque, que en caso de cualquier excepción imprime el mensaje de error. Si no hay errores, la conexión se establecerá y mostrará un mensaje de la siguiente manera.
Después de eso, hemos cerrado nuestra conexión en el bloque finally. Cerrar una conexión es opcional, pero es una buena práctica de programación, por lo que libera la memoria de cualquier recurso no utilizado.,
Create Table
para crear una tabla en SQLite3, puede utilizar la consulta Create Table en el método execute (). Considere los siguientes pasos:
- Crear un objeto de conexión.
- Desde el objeto de conexión, cree un objeto cursor.
- usando el objeto cursor, llame al método execute con create table query como parámetro.,
Vamos a crear empleados con los siguientes atributos:
employees (id, name, salary, department, position, hireDate)
El código como este:
En el código anterior, hemos definido dos métodos, el primero establece una conexión y el segundo método crea un objeto cursor para ejecutar la instrucción create table.
el método commit () guarda todos los cambios que hacemos. Al final, ambos métodos son llamados.
para comprobar si se ha creado nuestra tabla, puede utilizar el navegador de bases de datos para SQLite para ver su tabla. Abre tu mydatabase.,archivo db con el programa, y debería ver su tabla:
Insert in Table
para insertar datos en una tabla, usamos la instrucción INSERT INTO. Considere la siguiente línea de código:
cursorObj.execute("INSERT INTO employees VALUES(1, 'John', 700, 'HR', 'Manager', '2017-01-04')")con.commit()
para verificar si los datos están insertados, haga clic en Examinar datos en el navegador de bases de datos:
También podemos pasar valores/argumentos a una instrucción INSERT en el método execute (). Puedes usar el signo de interrogación (?) como marcador de posición para cada valor., La sintaxis de la inserción será como la siguiente:
cursorObj.execute('''INSERT INTO employees(id, name, salary, department, position, hireDate) VALUES(?, ?, ?, ?, ?, ?)''', entities)
donde las entidades contienen los valores para los marcadores de posición de la siguiente manera:
entities = (2, 'Andrew', 800, 'IT', 'Tech', '2018-02-06')
el código completo es el siguiente:
Actualizar tabla
para actualizar la tabla, simplemente cree una conexión, luego cree un objeto cursor usando la conexión y finalmente use la instrucción UPDATE en el método Execute ().
Supongamos que queremos actualizar el nombre del empleado cuyo id es igual a 2., Para la actualización, usaremos la declaración de actualización y para el empleado cuyo id sea igual a 2. Utilizaremos la cláusula WHERE como condición para seleccionar a este empleado.
considere el siguiente código:
esto cambiará el nombre de Andrew a Rogers de la siguiente manera:
instrucción Select
puede usar la instrucción select para seleccionar datos de una tabla en particular. Si desea seleccionar todas las columnas de los datos de una tabla, puede usar el asterisco (*)., La sintaxis será la siguiente:
select * from table_name
En SQLite3, la instrucción SELECT se ejecuta en el método execute del objeto cursor., Por ejemplo, seleccione Todas las columnas de la tabla de empleados, ejecute el siguiente código:
cursorObj.execute('SELECT * FROM employees ')
Si desea seleccionar algunas columnas de una tabla, especifique las columnas como las siguientes:
select column1, column2 from tables_name
por ejemplo,
cursorObj.execute('SELECT id, name FROM employees')
la instrucción SELECT Selecciona los datos requeridos de la tabla de la base de datos, y si desea obtener los datos seleccionados, se utiliza el método fetchall() del objeto cursor. Demostraremos esto en la siguiente sección.,
Fetch all data
para obtener los datos de una base de datos, ejecutaremos la instrucción SELECT y luego usaremos el método fetchall() del objeto cursor para almacenar los valores en una variable. Después de eso, haremos un bucle a través de la variable e imprimiremos todos los valores.
El código como este:
El código anterior imprimir los registros en nuestra base de datos como la siguiente:
también puede utilizar el fetchall() en una línea como la siguiente:
Si desea obtener información específica de la base de datos, puede utilizar la cláusula where., Por ejemplo, queremos obtener los ID y nombres de aquellos empleados cuyo salario es mayor que 800. Para esto, vamos a llenar nuestra tabla con más filas, luego ejecutar nuestra consulta.
puede utilizar la instrucción insert para rellenar los datos, o puede introducirlos manualmente en el programa dB browser.
ahora, para obtener id y nombres de aquellos que tienen un salario mayor que 800:
en la instrucción SELECT anterior, en lugar de usar el asterisco (*), especificamos los atributos id y name., El resultado será el siguiente:
sqlite3 rowcount
El sqlite3 rowcount se utiliza para devolver el número de filas afectadas o seleccionadas por la última consulta SQL ejecutada.
Cuando usamos rowcount con la instrucción SELECT, -1 devolverá el número de filas seleccionadas se desconoce hasta que estén todos recuperados., Considere el siguiente ejemplo:
print(cursorObj.execute('SELECT * FROM employees').rowcount)
por lo tanto, para obtener el recuento de filas, debe obtener todos los datos y, a continuación, obtener la longitud del resultado:
rows = cursorObj.fetchall()print len (rows)
condición (una cláusula WHERE), que eliminará todas las filas de la tabla y devolverá el número total de filas eliminadas en ROWCOUNT.
print(cursorObj.execute('DELETE FROM employees').rowcount)
Si no se elimina ninguna fila, devolverá cero.,
List tables
Para listar todas las tablas en una base de datos SQLite3, debe consultar la tabla sqlite_master y luego usar fetchall() para obtener los resultados de la instrucción SELECT.
El sqlite_master es la tabla maestra en SQLite3, que almacena todas las tablas.
esto listará todas las tablas de la siguiente manera:
compruebe si existe o no una tabla
al crear una tabla, debemos asegurarnos de que la tabla no existe ya. Del mismo modo, cuando se elimina/ elimina una tabla, la tabla debe existir.,s» con la instrucción DROP TABLE de la siguiente manera:
drop table if exists table_name
Por ejemplo,
cursorObj.execute('drop table if exists projects')
también podemos comprobar si la tabla a la que queremos acceder existe o no ejecutando la siguiente consulta:
cursorObj.execute('SELECT name from sqlite_master WHERE type = "table" AND name = "employees"')print(cursorObj.fetchall())
Si los empleados de la mesa existe, volverá a su nombre como sigue:
Si el nombre de la tabla que hemos especificado no existe, una matriz vacía serán devueltos:
Drop table
Usted puede quitar/eliminar una tabla mediante la instrucción DROP., La sintaxis de la instrucción DROP es la siguiente:
drop table table_name
para soltar una tabla, la tabla debe existir en la base de datos. Por lo tanto, se recomienda usar «if exists» con la instrucción drop de la siguiente manera:
drop table if exists table_name
por ejemplo,
sqlite3 exceptions
Las excepciones son los errores de tiempo de ejecución. En la programación de Python, todas las excepciones son las instancias de la clase derivada de BaseException.,
en SQLite3, tenemos las siguientes excepciones principales de Python:
DatabaseError
cualquier error relacionado con la base de datos genera el DatabaseError.
IntegrityError
IntegrityError es una subclase de DatabaseError y se genera cuando hay un problema de integridad de datos. Por ejemplo, los datos extranjeros no se actualizan en todas las tablas, lo que resulta en la inconsistencia de los datos.
ProgrammingError
la excepción ProgrammingError se plantea cuando hay errores de sintaxis o no se encuentra la tabla o se llama a la función con el número incorrecto de parámetros/ argumentos.,
OperationalError
esta excepción se genera cuando las operaciones de la base de datos fallan, por ejemplo, una desconexión inusual. Esto no es culpa de los programadores.
NotSupportedError
cuando se utilizan algunos métodos que no están definidos o soportados por la base de datos, se generará la excepción NotSupportedError.
sqlite3 Executemany (Bulk insert)
puede usar la instrucción executemany para insertar varias filas a la vez.
considere el siguiente código:
aquí creamos una tabla con dos columnas, y» data » tiene cuatro valores para cada columna., Pasamos la variable al método executemany () junto con la consulta.
tenga en cuenta que hemos utilizado el marcador de posición para pasar los valores.
el código anterior generará el siguiente resultado:
Close Connection
Una vez que haya terminado con su base de datos, es una buena práctica cerrar la conexión. Puede cerrar la conexión utilizando el método close ().,
para cerrar una conexión, use el objeto connection y llame al método close() de la siguiente manera:
con = sqlite3.connect('mydatabase.db')#program statementscon.close()
sqlite3 datetime
en la base de datos Python sqlite3, podemos almacenar fácilmente la fecha u hora importando el módulo datatime. Los siguientes formatos son los formatos más comunes que puede usar para datetime:
YYYY-MM-DDYYYY-MM-DD HH:MMYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS.SSSHH:MMHH:MM:SSHH:MM:SS.SSSnow
considere el siguiente código:
en este código, Importamos el módulo datetime primero, y hemos creado una tabla llamada asignaciones con tres columnas.
El tipo de datos de la tercera columna es una fecha., Para insertar la fecha en la columna, hemos utilizado datetime.fecha. Del mismo modo, podemos usar datetime.es hora de manejar el tiempo.
el código anterior generará la siguiente salida:
La gran flexibilidad y movilidad de la base de datos SQLite3 la convierten en la primera opción para que cualquier desarrollador la use y la envíe con cualquier producto con el que trabaje.
Puede usar bases de datos SQLite3 en proyectos de Windows, Linux, Mac OS, Android e iOS debido a su increíble portabilidad. Así que envías un archivo con tu proyecto y eso es todo.
espero que encuentres útil el tutorial., Sigue regresando.
Gracias.
Ayesha Tariq es una pila completa de ingeniero de software, desarrollador web, y blockchain promotor entusiasta. Tiene un amplio conocimiento de C / C++, Java, Kotlin, Python y varios otros.