technique:python:python_sqlite

Ceci est une ancienne révision du document !


Python & SQLite

Sqlite est une base de données présente sous la forme d'un unique fichier accessible depuis le compte en cours (pas de gestion de droits d'accès, à ma connaissance).

Inconvénient : lent, pas de multithread, mais simple et rapide pour des petites sollicitations

Depuis Linux : sqlite3 monfichier suffit à s'y connecter si on a les droits d'accès.

Attention, les commandes sqlite sont parfois spécifiques (.help pour en savoir plus)

Sources :

import sqlite3
connexion = sqlite3.connect("basededonnees.db")  #BDD dans le fichier "basededonnees.db"

connexion.close()  #Déconnexion

Attention à la correspondance de certains champs Python/SQL : NULL = None, INTEGER = int, REAL = float, TEXT = str…

curseur = connexion.cursor()  #Récupération d'un curseur

Attention, les requêtes n'impliquent de modification qu'après un commit (ou rollback si besoin)

#modifications....
connexion.commit()  #Validation des modifications
#modifications....
connexion.rollback()  #Retour à l'état du dernier commit, les modifications effectuées depuis sont perdues

curseur.execute('''MA REQUETE
    LONGUE
)''')

Plusieurs requêtes “execute” possibles à la suite, ou utilisation de executemany. Ou encore executescript contenant une liste de commandes.

Résultat de requêtes avec fetchone, qu'on peut lancer plusieurs fois (ne pas clore curseur avant)

curseur.fetchone() # donne le premier résultat et passe au suivant.

Exemple :

curseur.execute("SELECT valeur FROM scores WHERE pseudo = ?", donnee)
result = curseur.fetchone()
while result:
    print(result)
    result = curseur.fetchone()

Passage par fetchmany pour récupérer plusieurs résultats :

print(curseur.fetchmany(nbresultats))

Passage à fetchall pour tout récupérer :

curseur.execute("SELECT * FROM scores")
resultats = curseur.fetchall()

Ou bien parcours du résultat tant que la requête n'est pas close :

for resultat in curseur:
    print(resultat)

# Affichera tous les résultats un par un.

Nombre de résultat impactés par des modifications (pas SELECT) avec rowcount

print(curseur.rowcount) # -1 si pas de modifs.
  • technique/python/python_sqlite.1640189394.txt.gz
  • Dernière modification : 2021/12/22 17:09
  • de francoisa