Outils pour utilisateurs

Outils du site


sqlite3_csv_excel

Ceci est une ancienne révision du document !


Echanges avec Excel via les fichiers CSV

Objectif

On a un projet avec gestion d'une base de données relationnelle avec sqlite3.

Dans ce cadre, on peut rentrer des informations dans la base et en sortir des extractions. L'outil bureautique courant est un tableur type Excel ou openoffice.

La liaison entre la base de données et le tableur peut se faire par fichier CSV: cette interface est l'objet de cette page.

Code proposé

Il faut bien dire que les fichiers CSV sont en même temps indispensables et très imparfaits. On va donc ici réduire nos ambitions.

Extraction de la base de données

Quand on extrait des données de la base de données, on obtient une “liste de liste”, chaque sous-liste représentant une ligne de données qui pourra donner, après transfert, une ligne de tableur dans Excel.

Voilà, par exemple, une fonction qui permet de lire une table de la base. La base a été ouverte avant par cnx = sqlite3.connect(nomdelabase):

def liretable(cnx, table):
    """retourne la liste de tous les enregistrements de la table"""
    cur = cnx.cursor()
    cur.execute("""SELECT * FROM ?;""", (table,))
    liste = cur.fetchall()
    cur.close()
    return liste

Et voilà le genre de résultat:

[('Dupond', 'Albert',... ), ('Durand', 'Gilbert', ...)]

Et, bien sûr, le type de données récupérées correspond au type définis dans la table: chaine de caractère, entier ou réel. Ce sera important pour la suite: il faudrait que ces types de données soient transmis par le fichier CSV au tableur!

Ajouter des données à la base de données

A l'inverse, pour ajouter ou modifier des donnée à une table, on dispose d'une liste de liste comme précédemment.

Voilà, par exemple, le genre de code qui permet d'ajouter des lignes à une table. La base a été ouverte avant par cnx = sqlite3.connect(nomdelabase):

def ecriretable(cnx, table, LL):
    """insere toutes les lignes de la liste LL dans la table 
       NB: la longueur des lignes doit correspondre à la table!
       si la liste LL est vide => ne fait rien
    """
    if len(LL)!=0:
        cur = cnx.cursor()
        # préparation de la ligne de requête
        lg = len(LL[0])
        req = ("INSERT INTO " + table + " VALUES " + "(" + '?,'*lg)[:-1] + ')'
        # insertion des lignes de la table
        for ligne in LL:
            cur.execute(req, tuple(ligne))
        cnx.commit()       
        cur.close()
sqlite3_csv_excel.1287433065.txt.gz · Dernière modification: 2010/10/18 22:17 de tyrtamos

Outils de la page