1 # Copyright (C) 2013-2019 CEA/DEN, EDF R&D
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.
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.
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
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 from qtsalome import QSqlQuery
24 def __init__(self,nom):
27 def setField(self,FieldStringList):
28 self.FieldStringList=FieldStringList
29 self.idName=FieldStringList[0]
31 def setTypeField(self,FieldTypeListe,clef):
32 self.FieldTypeListe = FieldTypeListe
36 return self.FieldStringList
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")
43 texteQuery='insert into ' + self.nom + " values "+ str(valeurs)+ ';'
45 if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
46 else : maQuery.exec_(texteQuery)
48 def insereLigneAutoId(self,valeurs,debug=False):
49 texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
51 if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
52 else : maQuery.exec_(texteQuery)
54 def insereOuRemplaceLigne(self,valeurs,debug=False):
55 texteQuery='insert or replace into ' + self.nom + " values "+ str(valeurs)+ ';'
57 if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
58 else : maQuery.exec_(texteQuery)
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) +';'
65 maQuery.exec_(texteQuery)
67 while(maQuery.next()): nb=nb+1
72 print("Pas de remplissage sauf si cette methode est surchargee")
74 def createSqlTable(self):
75 print("Pas de creation par defaut : cette methode doit etre surchargee")
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 +';'
84 for col in self.FieldStringList:
86 texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
90 maQuery.exec_(texteQuery)
92 while(maQuery.next()):
94 for i in range(len(self.FieldStringList)):
95 texteSauve+=str(maQuery.value(i).toString())+";"
96 texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
100 print("pas de sauvegarde de : " , self.nom , " table vide")
103 from Stats.utiles import writeFile
104 Bok=writeFile(monFichier,texteSauve)
106 print("sauvegarde de : " , self.nom , " effectuee ")
108 print("pas de sauvegarde de : " , self.nom , " IOerror")
110 def importFromCSV(self,folder,force):
111 monFichier=folder+"/Sauve_"+str(self.nom)+'.csv'
113 f=open(monFichier,'r')
115 print("Pas de chargement de la table ", self.nom)
116 print("Impossible d'ouvrir le fichier ", monFichier)
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")
124 for StrVal in lignes[1:]:
125 listeVal=tuple(StrVal[0:-1].split(";"))
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))