problème de monitiring d'erreur sql
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:
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:
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:
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:
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: ???
Citation:
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)
j'ai trouver une solution
bonjour
j'ai trouvé une solution sur les exceptions d' sqlalchemy.exc
Code:
from sqlalchemy.exc import SQLAlchemyError ,DBAPIError , IntegrityError
Code:
1 2 3 4
| except SQLAlchemyError as e:
error = str(e.__dict__['orig'])
if error == 'UNIQUE constraint failed: fichier.Nom_fichier, fichier.date_reception':
print (f"Fichier : {nom_fichier_in} déjà trié") |
la valeur de error = str(e.__dict__['orig']) est
Citation:
'UNIQUE constraint failed: fichier.Nom_fichier, fichier.date_reception'
je vais donc trait ce cas