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 :
Accès depuis Python
import sqlite3
Connexion
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…
Requêtes
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.