Salome HOME
PyQt4/PyQt5 support.
[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(maQuery.next()): 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(maQuery.next()):
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))
114
115