Salome HOME
IMP: Verima / New Plugin: Added a plugin for meshers quality testing (work done at...
[modules/smesh.git] / src / Tools / Verima / Base / tableDeBase.py
1 from PyQt4 import QtSql, QtCore
2 from PyQt4.QtSql import *
3 import datetime
4
5 class TableDeBase :
6         def __init__(self,nom):
7           self.nom=nom
8
9         def setField(self,FieldStringList):
10           self.FieldStringList=FieldStringList
11           self.idName=FieldStringList[0]
12        
13         def setTypeField(self,FieldTypeListe,clef):
14           self.FieldTypeListe = FieldTypeListe
15           self.clef=clef
16
17         def getFields(self):
18           return self.FieldStringList
19     
20         def insereLigne(self,valeurs,debug=True):
21           if self.verifieExitenceId(valeurs[0])!=0 :
22              print "impossible d inserer " , valeurs, "dans ", self.nom
23              print "l id est deja existant"
24              return False
25           texteQuery='insert into ' + self.nom + " values "+ str(valeurs)+ ';'
26           maQuery=QSqlQuery()
27           if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
28           else     : maQuery.exec_(texteQuery)
29
30         def insereLigneAutoId(self,valeurs):
31           texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
32           maQuery=QSqlQuery()
33           print texteQuery, " " , maQuery.exec_(texteQuery)
34
35         def insereOuRemplaceLigne(self,valeurs,debug=True):
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