Saltar al contenido

¿Qué pasa si no cierro la conexión de la base de datos en Python SQLite?

Solución:

En respuesta a la pregunta específica de qué sucede si no cierra una base de datos SQLite, la respuesta es bastante simple y se aplica al uso de SQLite en cualquier lenguaje de programación. Cuando la conexión se cierra explícitamente por código o implícitamente por la salida del programa, se revierte cualquier transacción pendiente. (La reversión la realiza el siguiente programa para abrir la base de datos). Si no hay ninguna transacción pendiente abierta, no sucede nada.

Esto significa que no necesita preocuparse demasiado por cerrar siempre la base de datos antes de la salida del proceso, y que debe prestar atención a las transacciones asegurándose de iniciarlas y confirmarlas en los puntos adecuados.

Aquí tiene una preocupación subyacente válida, sin embargo, también es importante comprender cómo funciona sqlite:

1. connection open
    2. transaction started
        3. statement executes
    4. transaction done
5. connection closed

en términos de exactitud de los datos, solo debes preocuparte por las transacciones y no por las manijas abiertas. sqlite solo mantiene un bloqueo en una base de datos dentro de una transacción

o ejecución de sentencias. sin embargo en términos deAdministracion de recursos

, por ejemplo, si planea eliminar el archivo sqlite o usar tantas conexiones que podría quedarse sin descriptores de archivo, también le interesan las conexiones abiertas fuera de transacción. .close() Hay dos formas de cerrar una conexión: o llamas

explícitamente después de lo cual todavía tiene un identificador pero no puede usarlo, o deja que la conexión se salga del alcance y se recolecte la basura. si tudebe cerrar una conexión, ciérrelo explícitamente, según el lema de Python “explícito es mejor que implícito

. “

Si solo está verificando el código en busca de efectos secundarios, dejar que una última variable que contenga una referencia a la conexión salga del alcance puede ser aceptable, pero tenga en cuenta que las excepciones capturan la pila y, por lo tanto, las referencias en esa pila. si pasa excepciones, la vida útil de la conexión puede extenderse arbitrariamente.programador de advertencia

, sqlite usa transacciones “diferidas” de forma predeterminada, es decir, la transacción solo comienza cuando ejecuta una declaración. En el ejemplo anterior, la transacción se ejecuta de 3 a 4, en lugar de 2 a 4. Connection Este es el código que utilizo. los Cursor y el contextlib.closing()se cerrará automáticamente gracias a Connection . los

import sqlite3
import contextlib

def execute_statement(statement):
    with contextlib.closing(sqlite3.connect(path_to_file)) as conn: # auto-closes
        with conn: # auto-commits
            with contextlib.closing(conn.cursor()) as cursor: # auto-closes
                cursor.execute(statement)

se comprometerá automáticamente gracias al administrador de contexto.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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