# Alimentation d'une base de données SQLite existante à partir de
# données situées dans des fichiers CSV. Le nom des fichiers
# correspond au nom des différentes tables à remplir.
# Langage: Python 3.4

# Importation du module sqlite:

import sqlite3

# Définition de fonctions nécessaires:

def parse_line(line):
    '''
    parse_line(str line) --> list.
    Retourne la liste des valeurs
    des champs composant la ligne <line> entrée après avoir modifié
    les éventuelles apostrophes et enlever le caractère final de
    retour de ligne
    '''

    # traitement des apostrophes: les ' sont traduits par '' afin d'éviter toute confusion
    line = line.replace("'", "''")


    # enlever le retour de ligne final
    line = line[:len(line)-1]


    # retourner la liste des champs composant la ligne
    return line.split(";")


def insertion(cur, table, nomsAttributs, valeursAttributs):
    """
    Insert un enregistrement dans la table <table> à l'aide du curseur <cur>
    en associant chaque valeur de la liste <valeursAttributs> à l'attribut correspondant
    de la liste <nomsAttributs>.
    """

    try:

        # (1) Construction de la requête pour l'insertion des données

        ###############
        # A compléter #
        ###############
        
        # transmission de la requete au curseur
        cur.execute(req)

    except Exception as e:
        print(e)        # affiche l'erreur survenue
        print(req)      # affiche la requête engendrant l'erreur


def importation_table(cur, nomTable):
    """
    Lit chaque ligne du fichier csv associé à la table <nomTable> à remplir
    et l'insert dans la table.
    """
    # nom du fichier = nom de la table avec extension csv
    nomFichier = nomTable + '.csv'

    # ouverture du fichier en mode lecture
    of = open(nomFichier, 'r', encoding = 'utf-8')

    # récupère la première ligne du fichier après l'avoir traitée avec parse_line
    nomsAttributs = parse_line(of.readline())

    # efface l'éventuel contenu de la table <nomTable> avant importation
    cur.execute("DELETE FROM {table}".format(table=nomTable))

    # chaque ligne du fichier est importée dans la table à l'aide de
    # la fonction <insertion>

    ligne = of.readline()

    while ligne != '':
        # (2)
        ###############
        # A compléter #
        ###############


    # fermeture du fichier après utilisation
    of.close()



def close_db(conn, cur):
    """
    Transfert curseur -> disque
    Fermeture de la connexion à la base de données
    Fermeture du curseur
    """
    conn.commit()
    cur.close()
    conn.close()


#####################################
### Corps principal du programme  ###
#####################################

database = 'Librairie.sq3'          # base de données à peupler
conn = sqlite3.connect(database)    # connexion à la base de donnée
cur = conn.cursor()                 # établissement du curseur

nomTable = input("Entrez le nom d'une table à remplir (ou <ENTER> pour terminer): ")

while nomTable != '':
    # (3) Importation de la table et
    # affichage des données entrées sous forme de tuples:
    ###############
    # A compléter #
    ###############

    nomTable = input("Entrez le nom d'une table à remplir (ou <ENTER> pour terminer): ")


# Fermeture définitive de la base de données
close_db(conn, cur)