Formation PUB400 : Python, 2018 Python et SQLite

4.2 Branchement à une BD SQLite avec Python


La première étape à réaliser pour pouvoir travailler avec une base de données, c'est de se connecter dessus.

Ceci sera réalisé à l'aide de la méthode connect(). Il ne faut pas oublier de refermer la connexion avec close() lorsque le travail est terminé.

Attention : je vous présente ici les concepts de base sur le branchement à une base de données SQLite. Une version plus robuste est présentée ici.

Ex :

Python

#!/usr/bin/env python

 

import sqlite3

 

connexion = sqlite3.connect('mabd.db')

...

connexion.close()

Si vous fournissez un nom de base de données qui n'existe pas, une base de données vide sera créée.

Gestion des exceptions

Une fois la connexion établie, il peut y avoir de nombreuses raisons qui font en sorte qu'une requête SQL ne fonctionne pas : erreur de syntaxe, mauvais nom de table, mauvais nom de champ, etc.

C'est pourquoi les opérations qui impliquent une base de données devraient toujours être placées dans un bloc try... except. On en profitera pour refermer la connexion dans le bloc finally, après s'être assurés que la connexion avait bien été réussie.

Ex :

Python

try:

    connexion = sqlite3.connect('mabd.db')

    ...

 

except:

    ...

 

finally:

    connexion.close()

Pour réagir de façon plus précise à des problèmes spécifiques, il est possible d'utiliser plusieurs blocs except. Le module sqlite3 prévoit de nombreuses classes d'exceptions. La plus utilisée est sqlite3.Operation.alError.

Ex :

Python

try:

    connexion = sqlite3.connect('mabd.db')

    ...

 

except sqlite3.OperationalError as e:

    print('Il y a une erreur dans la requête SQL.')

 

except Exception as e:

    print('Une erreur inattendue est survenue.')

 

finally:

    connexion.close()

Pour vous aider à retrouver ce qui a pu causer l'erreur, il est possible de demander à Python d'afficher de l'information de débogage à la console.

Ex :

Python

#!/usr/bin/env python

 

import sqlite3

import sys

import traceback

 

try:

    connexion = sqlite3.connect('mabd.db')

    ...

 

except sqlite3.OperationalError as e:

    print('Il y a une erreur dans la requête SQL.')

    traceback.print_exc(file=sys.stdout)

 

except Exception as e:

    print('Une erreur inattendue est survenue.')

    traceback.print_exc(file=sys.stdout)

 

finally:

    connexion.close()

Chemin vers la base de données

Si la base de données n'est pas placée dans le même dossier que le fichier .py, il faudra préciser son chemin.

Si le chemin contient un dossier avec des espaces ou des caractères accentués dans son nom, la connection pourra avoir lieu sans problème. Notez toutefois que cette pratique est à éviter.

Afin d'assurer la compatibilité avec Linux et Mac, on utilisera la barre oblique (slash : /) plutôt que la barre oblique inverse (backslash : \).

De toute façon, la barre oblique inverse est le caractère d'échappement alors il faudrait la doubler pour que Python l'interprète correctement. L'option de la barre oblique est plus intéressante.

Pour que le programme puisse être déplacé vers un autre dossier sans problème, il faut travaillera avec des chemins relatifs (qui débutent directement par un nom de dossier ou par ../).

Si la base de données est dans le même dossier que le fichier .py :

Python

connexion = sqlite3.connect('mabd.db')

Si elle est dans un sous-dossier placé directement sous le dossier du fichier .py :

Python

connexion = sqlite3.connect('sousdossier/mabd.db')

Si elle est dans un dossier placé à un endroit différent (il faudra adapter le chemin selon la hiérarchie de vos dossiers) :

Python

connexion = sqlite3.connect('../../dossier/mabd.db')

À éviter :

Python

connexion = sqlite3.connect('C:/Users/VotreNom/Documents/MonProjet/sousdossier/mabd.db')

Pour plus d'information

« Opening A New Database Connection ». SQLite. https://www.sqlite.org/c3ref/open.html

« Connections to a database - Connection.close ». Roger Binns. https://rogerbinns.github.io/apsw/connection.html#apsw.Connection.close

« PEP 249 -- Python Database API Specification v2.0 - Exceptions ». Python. https://www.python.org/dev/peps/pep-0249/#exceptions

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre