Salome HOME
Enable splitting bi-quad quadrangles by QuadToTri()
[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=False):
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,debug=False):
31           texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
32           maQuery=QSqlQuery()
33           if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
34           else     : maQuery.exec_(texteQuery)
35
36         def insereOuRemplaceLigne(self,valeurs,debug=False):
37           texteQuery='insert or replace into ' + self.nom + " values "+ str(valeurs)+ ';'
38           maQuery=QSqlQuery()
39           if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
40           else     : maQuery.exec_(texteQuery)
41
42
43         def verifieExitenceId(self,valeur):
44 # ne fonctionne pas correctement, il faudrait se servir de la clef
45            texteQuery= "select * from " + self.nom + " where "+ self.idName+'='+str(valeur) +';'
46            maQuery=QSqlQuery()
47            maQuery.exec_(texteQuery)
48            nb=0
49            while(maQuery.next()): nb=nb+1
50            return nb
51
52
53         def remplit(self):
54             print "Pas de remplissage sauf si cette methode est surchargee"
55
56         def createSqlTable(self):
57             print "Pas de creation par defaut : cette methode doit etre surchargee"
58
59 # On ne se sert pas du csv python entre autre parcequ'il ne gere pas les entetes
60         def exportToCSV(self):
61            aujourdhui=datetime.date.today()
62            monFolder="ExportDB"+str(aujourdhui)
63            monFichier=monFolder+"/Sauve_"+str(self.nom)+'.csv'
64            texteQuery= "select * from " + self.nom +';'
65            texteSauve=""
66            for col in self.FieldStringList:
67                texteSauve+=col+";"
68            texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
69            texteSauve+="\n"
70          
71            maQuery=QSqlQuery()
72            maQuery.exec_(texteQuery)
73            asauver=0
74            while(maQuery.next()):
75               asauver=1
76               for i in range(len(self.FieldStringList)):
77                   texteSauve+=str(maQuery.value(i).toString())+";"
78               texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
79               texteSauve+="\n"
80            
81            if asauver == 0 :
82               print "pas de sauvegarde de : " , self.nom , " table vide"
83               return
84
85            from Stats.utiles import writeFile
86            Bok=writeFile(monFichier,texteSauve)
87            if Bok :
88               print "sauvegarde de : " , self.nom , " effectuee "
89            else :
90               print "pas de sauvegarde de : " , self.nom , " IOerror"
91
92         def importFromCSV(self,folder,force):
93            monFichier=folder+"/Sauve_"+str(self.nom)+'.csv'
94            try :
95              f=open(monFichier,'r')
96            except:
97              print "Pas de chargement de la table ", self.nom
98              print "Impossible d'ouvrir le fichier ", monFichier
99              return 0
100            lignes=f.readlines()
101            enTete=tuple(lignes[0][0:-1].split(";"))
102            if enTete!=self.FieldStringList:
103              print "Pas de chargement de la table ", self.nom
104              print "les entetes ne correspondent pas"
105              return 0
106            for StrVal in lignes[1:]:
107                listeVal=tuple(StrVal[0:-1].split(";"))
108                listeValTypee=[]
109                for i in range(len(listeVal)):
110                    if self.FieldTypeListe[i]=='int'  : listeValTypee.append(int(listeVal[i]))
111                    if self.FieldTypeListe[i]=='float': listeValTypee.append(float(listeVal[i]))
112                    if self.FieldTypeListe[i]=='str'  : listeValTypee.append(listeVal[i])
113                if force==1 : self.insereOuRemplaceLigne(tuple(listeValTypee))
114                if force==0 : self.insereLigne(tuple(listeValTypee))
115
116