bonjour

Afin de vérifier le traitement d'un fichier j'ai une petite base sqllite dans laquelle j' insert Nom_fichier + date_de_reception.
table a bien-sur un contrôle d'intégrité sur ce doublon

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE fichier (
	"Id_fichieronglet" INTEGER NOT NULL, 
	"Nom_fichier" VARCHAR(255) NOT NULL, 
	date_reception INTEGER NOT NULL, 
	PRIMARY KEY ("Id_fichieronglet"), 
	CONSTRAINT "_Idfic" UNIQUE ("Nom_fichier", date_reception)
);

code slqalchemy

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
class T_fichier (Base) :
    __tablename__ = 'fichier'
    Id_fichieronglet  =  Column(Integer, primary_key=True,  autoincrement=True)   
    Nom_fichier =  Column(String( 255), nullable=False)
    date_reception  = Column(Integer, nullable=False) #AAAAMMJJ
 
    __table_args__ = (UniqueConstraint('Nom_fichier', 'date_reception',name='_Idfic'),
                     )
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
import sqlite3
if __name__ == '__main__':
 
.....
   requete_Fichier = insert(T_fichier).values(Nom_fichier =nom_fichier_in,date_reception =la_date_de_reception)
 
 
 
        try:
            Session_en_base.execute(requete_Fichier)
 
        #'''except sqlite3.IntegrityError as err:'''
        except sqlite3.IntegrityError:
            Session_en_base.rollback()
            print(f'Fichier {nom_fichier_in} déjà traiter')
            #err.error("Integrity error: %s", str(err))
 
        except  Exception as erreur:    
            print("Erreur:" , erreur)
            Session_en_base.rollback()
        else:
            Session_en_base.commit() 
 
    # Fichier excel
je voudrais monitorer le contrôle d'intégrité pour envoyer le message "fichier déjà" traité mais il semble mon code d'exception ne soit pas utilisé ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
        except sqlite3.IntegrityError:
            Session_en_base.rollback()
            print(f'Fichier {nom_fichier_in} déjà traiter')
car j'obtiens ce message d 'erreur qui bien que pertinent devrait être prise en charge par except sqlite3.IntegrityError: ???

Erreur: (sqlite3.IntegrityError) UNIQUE constraint failed: fichier.Nom_fichier, fichier.date_reception
[SQL: INSERT INTO fichier ("Nom_fichier", date_reception) VALUES (?, ?)]
[parameters: ('fichier1.txt', '27052022')]

(Background on this error at: https://sqlalche.me/e/14/gkpj)