105 votes

Que se passe-t-il si je ne ferme pas la connexion à la base de données en Python SQLite ?

Je suis en train de faire quelque chose comme ça...

conn = sqlite3.connect(db_filename)

with conn:
    cur = conn.cursor()
    cur.execute( ... )

with valide automatiquement les modifications. Mais la documentation ne dit rien sur la fermeture de la connexion.

En fait, je peux utiliser conn dans les déclarations ultérieures (que j'ai testées). Il semble donc que le gestionnaire de contexte ne ferme pas la connexion.

Dois-je fermer manuellement la connexion ? Que se passe-t-il si je la laisse ouverte ?

EDIT

Mes conclusions :

  • En la connexion n'est pas fermée dans le gestionnaire de contexte, je l'ai testé et confirmé. Lors de __exit__ le gestionnaire de contexte ne valide les modifications qu'en faisant conn.commit()
  • with conn y with sqlite3.connect(db_filename) as conn sont les mêmes, de sorte que l'utilisation de l'un ou l'autre maintiendra la connexion en vie
  • with ne crée pas de nouvelle portée, donc toutes les variables créées à l'intérieur de la suite de with seront accessibles à l'extérieur de celle-ci
  • Enfin, vous devez fermer la connexion manuellement

0voto

Snakes and Coffee Points 3799

With est censé fermer automatiquement la connexion, mais vous utilisez

with conn:

au lieu de

with sqlite3.connect(db_filename) as conn:

-1voto

Guido Points 58

Pour gérer une connexion à une base de données, je procède généralement de la manière suivante,

# query method belonging to a DB manager class

def query (self, sql):
    con = sqlite3.connect(self.dbName)
    with con:
        cur = con.cursor()
        cur.execute(sql)
        res = cur.fetchall()
    if con:
        con.close()

    return res

ce faisant, je suis sûr que la connexion est explicitement fermée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X