Salome HOME
Merge branch 'V8_3_BR' into ngr/python3_dev
[modules/smesh.git] / src / Tools / Verima / Base / tableDeBase.py
1 from qtsalome import QSqlQuery
2 import datetime
3
4 class TableDeBase :
5     def __init__(self,nom):
6         self.nom=nom
7
8     def setField(self,FieldStringList):
9         self.FieldStringList=FieldStringList
10         self.idName=FieldStringList[0]
11
12     def setTypeField(self,FieldTypeListe,clef):
13         self.FieldTypeListe = FieldTypeListe
14         self.clef=clef
15
16     def getFields(self):
17         return self.FieldStringList
18
19     def insereLigne(self,valeurs,debug=False):
20         if self.verifieExitenceId(valeurs[0])!=0 :
21             print("impossible d inserer " , valeurs, "dans ", self.nom)
22             print("l id est deja existant")
23             return False
24         texteQuery='insert into ' + self.nom + " values "+ str(valeurs)+ ';'
25         maQuery=QSqlQuery()
26         if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
27         else     : maQuery.exec_(texteQuery)
28
29     def insereLigneAutoId(self,valeurs,debug=False):
30         texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
31         maQuery=QSqlQuery()
32         if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
33         else     : maQuery.exec_(texteQuery)
34
35     def insereOuRemplaceLigne(self,valeurs,debug=False):
36         texteQuery='insert or replace into ' + self.nom + " values "+ str(valeurs)+ ';'
37         maQuery=QSqlQuery()
38         if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
39         else     : maQuery.exec_(texteQuery)
40
41
42     def verifieExitenceId(self,valeur):
43 # ne fonctionne pas correctement, il faudrait se servir de la clef
44         texteQuery= "select * from " + self.nom + " where "+ self.idName+'='+str(valeur) +';'
45         maQuery=QSqlQuery()
46         maQuery.exec_(texteQuery)
47         nb=0
48         while(next(maQuery)): nb=nb+1
49         return nb
50
51
52     def remplit(self):
53         print("Pas de remplissage sauf si cette methode est surchargee")
54
55     def createSqlTable(self):
56         print("Pas de creation par defaut : cette methode doit etre surchargee")
57
58 # On ne se sert pas du csv python entre autre parcequ'il ne gere pas les entetes
59     def exportToCSV(self):
60         aujourdhui=datetime.date.today()
61         monFolder="ExportDB"+str(aujourdhui)
62         monFichier=monFolder+"/Sauve_"+str(self.nom)+'.csv'
63         texteQuery= "select * from " + self.nom +';'
64         texteSauve=""
65         for col in self.FieldStringList:
66             texteSauve+=col+";"
67         texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
68         texteSauve+="\n"
69
70         maQuery=QSqlQuery()
71         maQuery.exec_(texteQuery)
72         asauver=0
73         while(next(maQuery)):
74             asauver=1
75             for i in range(len(self.FieldStringList)):
76                 texteSauve+=str(maQuery.value(i).toString())+";"
77             texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
78             texteSauve+="\n"
79
80         if asauver == 0 :
81             print("pas de sauvegarde de : " , self.nom , " table vide")
82             return
83
84         from Stats.utiles import writeFile
85         Bok=writeFile(monFichier,texteSauve)
86         if Bok :
87             print("sauvegarde de : " , self.nom , " effectuee ")
88         else :
89             print("pas de sauvegarde de : " , self.nom , " IOerror")
90
91     def importFromCSV(self,folder,force):
92         monFichier=folder+"/Sauve_"+str(self.nom)+'.csv'
93         try :
94             f=open(monFichier,'r')
95         except:
96             print("Pas de chargement de la table ", self.nom)
97             print("Impossible d'ouvrir le fichier ", monFichier)
98             return 0
99         lignes=f.readlines()
100         enTete=tuple(lignes[0][0:-1].split(";"))
101         if enTete!=self.FieldStringList:
102             print("Pas de chargement de la table ", self.nom)
103             print("les entetes ne correspondent pas")
104             return 0
105         for StrVal in lignes[1:]:
106             listeVal=tuple(StrVal[0:-1].split(";"))
107             listeValTypee=[]
108             for i in range(len(listeVal)):
109                 if self.FieldTypeListe[i]=='int'  : listeValTypee.append(int(listeVal[i]))
110                 if self.FieldTypeListe[i]=='float': listeValTypee.append(float(listeVal[i]))
111                 if self.FieldTypeListe[i]=='str'  : listeValTypee.append(listeVal[i])
112             if force==1 : self.insereOuRemplaceLigne(tuple(listeValTypee))
113             if force==0 : self.insereLigne(tuple(listeValTypee))