IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

notion de class et lecture de csv


Sujet :

Python

  1. #21
    Expert confirm�
    Avatar de tyrtamos
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2007
    Messages
    4 486
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Retrait�

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par d�faut
    Citation Envoy� par dedalios Voir le message
    Sauf erreur tant que le commit n'est pas valid� , le instruction reste en m�moireet n'impace pas la base donc faut-il dans ce cas utiliser le roolback!!! avant le close de base .
    Selon le livre apprednre a programme avec python3 , sur les pages associer � la gestion de base de donn�e nottament sqllite il y dit est r�p�ter " le modification apport�es au curseur se passent en m�moire viv et de ce fait rien n'est enregitr� d�finitivemernt tant que vous n'ex�cutez pas l'instruction de commit ,vous pouvez annuler toutes les modifications apport� depuis le pr�c�dent commit() en refermant la conecion � l'aide de l'instruction Base.close().
    ce qui pose question sur le roolback...
    Ce n'est pas ce que j'ai dit. Voil� comment je fais, avec l'exemple de ton code:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    LaBase ="nombase2.sq3" 
    Base = sqlite3.connect(LaBase)
     
    .....
     
                try:
                    curseur.execute(instruction)
                    Base.commit()
                except sqlite3.Error as e:
                    print("Problème"+ " :" +   e.args[0]  + " sur commande /n"++ instructiuon)  
                    Base.rollback()
     
    ...
     
    Base.close()
    En faisant comme �a, si le commit �choue mais a d�j� commenc� � faire des modifs, rollback d�monte les modifs partiellement appliqu�es pour retrouver la situation du commit pr�c�dent.

    Je fais comme �a depuis longtemps avec des bases complexes (plus de 10 tables et plusieurs contraintes de cl�s �trang�res), et je n'ai jamais eu le moindre probl�me d'int�grit� de la base.

    On peut aussi �viter d'�crire l'instruction avec ".rollback()" en utilisant le manager de contexte (avec with...) comme c'est d�crit dans la doc de Python: le rollback est alors implicite � la fin du bloc en cas d'erreur.

    Je reconnais que �a concerne surtout des probl�mes plus complexes (avec plusieurs ".execute"), mais c'est int�ressant de prendre de bonnes habitudes...

  2. #22
    Membre �clair� Avatar de dedalios
    Homme Profil pro
    concepteur d'application
    Inscrit en
    F�vrier 2008
    Messages
    495
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activit� : concepteur d'application
    Secteur : Sant�

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 495
    Par d�faut Solution faite sur la base de la des r�flexions Tyrtamos
    Voici le code creer sur la base des r�flexions Tyrtamos


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    # coding: utf-8  
    '''
    Created on 23 mars 2018
     
    @author: 
    '''
    import csv
    import sqlite3
    import sys
    import datetime
    import csv
    import os
    import encodings
    from unidecode import unidecode
    from codecs import open
     
    def convertie_date(src):
        if src =='NULL':
            valid_date = None
        else:
            alpha_aaaa = int(src[0:4]) 
            alpha_mm =   int(src[4:6]) 
            alpha_jj =  int(src[6:8]) 
            try :
                valid_date = datetime.date(alpha_aaaa,alpha_mm,alpha_jj) 
                return valid_date
            except ValueError:
                print('%s Date invalide !' % src)
                return None
    pass  
     
    def EstceNull(src):
        if src =='NULL':
            return  None
        else:
            return src
     
    def Estce_nombreNull(src):
        if src =='NULL':
            return  None
        else:
            return int(src)    
     
    class ExcelFr(csv.excel):
        # Séparateur de champ
        delimiter = ";"
        # Séparateur de ''chaîne''
        quotechar = None
        # Gestion du séparateur dans les ''chaînes''
        escapechar = None
        doublequote = True
        # Fin de ligne
        lineterminator = "\r\n"
        # Ajout automatique du séparateur de chaîne (pour ''writer'')
        quoting = csv.QUOTE_NONE
        # Ne pas ignorer les espaces entre le délimiteur de chaîne
        # et le texte
        skipinitialspace = False 
     
     
    class vls_actes(object):
     
        def __init__(self,liste):
     
            self.ACT_CODE = EstceNull(liste[0]);
            self.ACT_LIBELLE = EstceNull(liste[1]);
     
        def __str__(self):
            resultat = "Act_Code : " +  str(self.ACT_CODE) + "\n"
            resultat += "ACT_LIBELLE: " + str(self.ACT_LIBELLE )  
            return  resultat
     
        def table_sqllite(self,Base):
            creer_table  = """CREATE TABLE vsl_actes(
                ACT_CODE TEXT(255) NOT NULL,
                ACT_LIBELLE TEXT(255),
                CONSTRAINT actes_pk PRIMARY KEY(ACT_CODE)
            );
            """ 
     
            detruire_table  = """DROP TABLE IF EXISTS vsl_actes;"""
     
            curseur =  Base.cursor() # appel au curseur
     
            # supprimer table existante
            if(detruire_table !=""):
                try:
                    curseur.execute(detruire_table)  
                except sqlite3.Error as e:
                    print("Problème"+ " :" +   e.args[0]  + " sur commande /n"+ detruire_table )
                    Base.rollback()
                else:
                  Base.commit()    
     
            pass       
            if(creer_table !=""):
                print("creer base")
                try:
                    curseur.execute(creer_table)
                except sqlite3.Error as e:
                    print("Problème"+ " :" +   e.args[0]  + " sur commande /n"++ creer_table )  
                    Base.rollback()
                else:
                  Base.commit()    
            pass
     
        def insertion_sqllite(self,Base):
     
            curseur = Base.cursor() # appel au curseur
            data=[self.ACT_CODE,self.ACT_LIBELLE]
     
            if(self.ACT_CODE == '9BFC1'):
                print(data)     
            rq = """       INSERT INTO vsl_actes
                            (ACT_CODE, ACT_LIBELLE)
                               VALUES(?, ?);"""
     
            try:
                curseur.execute(rq,data)
     
            except sqlite3.Error as e:
                print("Problème"+ " :" +   e.args[0]  + " sur commande d'insertion /n" )  
                print(rq)
                Base.rollback()
            else: 
                Base.commit()  
     
    def actes(nomfichier,Base):
     
        file = open(nomfichier,  encoding='utf8')
        i=0 # indeteur de ligne du fichier pour ne pas traiter l'entete 
        #
        # Ouverture du fichier source.
        #
        try:
            #
            # Cr�ation du ''lecteur'' CSV.
            #
            fichier_lu = csv.reader(file, 'excel-fr')
     
            max_long_ACT_CODE = 0
            max_long_ACT_LIBELLE = 0
            for row in fichier_lu:
                i+=1
     
                if(i>1):
                    nouvel_acte = vls_actes(row)  
     
                    if(i==2): # Suppprsseion de la table pr�c�dente  si besion 
                        # cr�ation de la nouvelle table 
                        nouvel_acte.table_sqllite(Base)
                    # insertion de donn�es
                    nouvel_acte.insertion_sqllite(Base)
     
                    if(max_long_ACT_CODE < len(nouvel_acte.ACT_CODE)):
                         max_long_ACT_CODE = len(nouvel_acte.ACT_CODE)
     
                    if(max_long_ACT_LIBELLE < len(nouvel_acte.ACT_LIBELLE)):
                         max_long_ACT_LIBELLE = len(nouvel_acte.ACT_LIBELLE)
     
            #print(max_long_ACT_CODE, end='\n' )
            #print(max_long_ACT_LIBELLE , end='\n')
        except OSError:
                print("Problème d'access au fichier :" + nomfichier)
        finally:
            #
            # Fermeture du fichier source
            #
            file.close()     
     
     
     
    if __name__ == '__main__':
        # Enregistre ce dialecte aupr�s du module csv
        encodage ="utf-8"
        LaBase ="nombase2.sq3" 
        Base = sqlite3.connect(LaBase)
        csv.register_dialect('excel-fr', ExcelFr())
     
        actes("actes.csv" , Base)
     
        Base.close()

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 2 sur 2 Premi�rePremi�re 12

Discussions similaires

  1. lecture fichier .csv
    Par wiss20000 dans le forum Entr�e/Sortie
    R�ponses: 4
    Dernier message: 06/06/2007, 20h48
  2. R�ponses: 7
    Dernier message: 06/02/2007, 13h27
  3. R�ponses: 5
    Dernier message: 08/01/2007, 14h05
  4. classe de lecture d'images
    Par suckthewindow dans le forum Biblioth�ques
    R�ponses: 7
    Dernier message: 16/09/2005, 16h06
  5. Notions de classe abstraite
    Par smag dans le forum C++
    R�ponses: 11
    Dernier message: 12/06/2005, 02h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo