Salome HOME
Merge branch 'V9_9_BR'
[modules/smesh.git] / src / Tools / Verima / Base / tableDeBase.py
1 # Copyright (C) 2013-2022  EDF R&D
2 #
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
7 #
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 # Lesser General Public License for more details.
12 #
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19
20 from qtsalome import QSqlQuery
21 import datetime
22
23 class TableDeBase :
24     def __init__(self,nom):
25         self.nom=nom
26
27     def setField(self,FieldStringList):
28         self.FieldStringList=FieldStringList
29         self.idName=FieldStringList[0]
30
31     def setTypeField(self,FieldTypeListe,clef):
32         self.FieldTypeListe = FieldTypeListe
33         self.clef=clef
34
35     def getFields(self):
36         return self.FieldStringList
37
38     def insereLigne(self,valeurs,debug=False):
39         if self.verifieExitenceId(valeurs[0])!=0 :
40             print("impossible d inserer " , valeurs, "dans ", self.nom)
41             print("l id est deja existant")
42             return False
43         texteQuery='insert into ' + self.nom + " values "+ str(valeurs)+ ';'
44         maQuery=QSqlQuery()
45         if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
46         else     : maQuery.exec_(texteQuery)
47
48     def insereLigneAutoId(self,valeurs,debug=False):
49         texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
50         maQuery=QSqlQuery()
51         if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
52         else     : maQuery.exec_(texteQuery)
53
54     def insereOuRemplaceLigne(self,valeurs,debug=False):
55         texteQuery='insert or replace into ' + self.nom + " values "+ str(valeurs)+ ';'
56         maQuery=QSqlQuery()
57         if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
58         else     : maQuery.exec_(texteQuery)
59
60
61     def verifieExitenceId(self,valeur):
62 # ne fonctionne pas correctement, il faudrait se servir de la clef
63         texteQuery= "select * from " + self.nom + " where "+ self.idName+'='+str(valeur) +';'
64         maQuery=QSqlQuery()
65         maQuery.exec_(texteQuery)
66         nb=0
67         while(maQuery.next()): nb=nb+1
68         return nb
69
70
71     def remplit(self):
72         print("Pas de remplissage sauf si cette methode est surchargee")
73
74     def createSqlTable(self):
75         print("Pas de creation par defaut : cette methode doit etre surchargee")
76
77 # On ne se sert pas du csv python entre autre parcequ'il ne gere pas les entetes
78     def exportToCSV(self):
79         aujourdhui=datetime.date.today()
80         monFolder="ExportDB"+str(aujourdhui)
81         monFichier=monFolder+"/Sauve_"+str(self.nom)+'.csv'
82         texteQuery= "select * from " + self.nom +';'
83         texteSauve=""
84         for col in self.FieldStringList:
85             texteSauve+=col+";"
86         texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
87         texteSauve+="\n"
88
89         maQuery=QSqlQuery()
90         maQuery.exec_(texteQuery)
91         asauver=0
92         while(maQuery.next()):
93             asauver=1
94             for i in range(len(self.FieldStringList)):
95                 texteSauve+=str(maQuery.value(i).toString())+";"
96             texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
97             texteSauve+="\n"
98
99         if asauver == 0 :
100             print("pas de sauvegarde de : " , self.nom , " table vide")
101             return
102
103         from Stats.utiles import writeFile
104         Bok=writeFile(monFichier,texteSauve)
105         if Bok :
106             print("sauvegarde de : " , self.nom , " effectuee ")
107         else :
108             print("pas de sauvegarde de : " , self.nom , " IOerror")
109
110     def importFromCSV(self,folder,force):
111         monFichier=folder+"/Sauve_"+str(self.nom)+'.csv'
112         try :
113             f=open(monFichier,'r')
114         except:
115             print("Pas de chargement de la table ", self.nom)
116             print("Impossible d'ouvrir le fichier ", monFichier)
117             return 0
118         lignes=f.readlines()
119         enTete=tuple(lignes[0][0:-1].split(";"))
120         if enTete!=self.FieldStringList:
121             print("Pas de chargement de la table ", self.nom)
122             print("les entetes ne correspondent pas")
123             return 0
124         for StrVal in lignes[1:]:
125             listeVal=tuple(StrVal[0:-1].split(";"))
126             listeValTypee=[]
127             for i in range(len(listeVal)):
128                 if self.FieldTypeListe[i]=='int'  : listeValTypee.append(int(listeVal[i]))
129                 if self.FieldTypeListe[i]=='float': listeValTypee.append(float(listeVal[i]))
130                 if self.FieldTypeListe[i]=='str'  : listeValTypee.append(listeVal[i])
131             if force==1 : self.insereOuRemplaceLigne(tuple(listeValTypee))
132             if force==0 : self.insereLigne(tuple(listeValTypee))