smesh/src/Tools/Verima/Base/tableDeBase.py

116 lines
4.4 KiB
Python

from PyQt4 import QtSql, QtCore
from PyQt4.QtSql import *
import datetime
class TableDeBase :
def __init__(self,nom):
self.nom=nom
def setField(self,FieldStringList):
self.FieldStringList=FieldStringList
self.idName=FieldStringList[0]
def setTypeField(self,FieldTypeListe,clef):
self.FieldTypeListe = FieldTypeListe
self.clef=clef
def getFields(self):
return self.FieldStringList
def insereLigne(self,valeurs,debug=True):
if self.verifieExitenceId(valeurs[0])!=0 :
print "impossible d inserer " , valeurs, "dans ", self.nom
print "l id est deja existant"
return False
texteQuery='insert into ' + self.nom + " values "+ str(valeurs)+ ';'
maQuery=QSqlQuery()
if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
else : maQuery.exec_(texteQuery)
def insereLigneAutoId(self,valeurs):
texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
maQuery=QSqlQuery()
print texteQuery, " " , maQuery.exec_(texteQuery)
def insereOuRemplaceLigne(self,valeurs,debug=True):
texteQuery='insert or replace into ' + self.nom + " values "+ str(valeurs)+ ';'
maQuery=QSqlQuery()
if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
else : maQuery.exec_(texteQuery)
def verifieExitenceId(self,valeur):
# ne fonctionne pas correctement, il faudrait se servir de la clef
texteQuery= "select * from " + self.nom + " where "+ self.idName+'='+str(valeur) +';'
maQuery=QSqlQuery()
maQuery.exec_(texteQuery)
nb=0
while(maQuery.next()): nb=nb+1
return nb
def remplit(self):
print "Pas de remplissage sauf si cette methode est surchargee"
def createSqlTable(self):
print "Pas de creation par defaut : cette methode doit etre surchargee"
# On ne se sert pas du csv python entre autre parcequ'il ne gere pas les entetes
def exportToCSV(self):
aujourdhui=datetime.date.today()
monFolder="ExportDB"+str(aujourdhui)
monFichier=monFolder+"/Sauve_"+str(self.nom)+'.csv'
texteQuery= "select * from " + self.nom +';'
texteSauve=""
for col in self.FieldStringList:
texteSauve+=col+";"
texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
texteSauve+="\n"
maQuery=QSqlQuery()
maQuery.exec_(texteQuery)
asauver=0
while(maQuery.next()):
asauver=1
for i in range(len(self.FieldStringList)):
texteSauve+=str(maQuery.value(i).toString())+";"
texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
texteSauve+="\n"
if asauver == 0 :
print "pas de sauvegarde de : " , self.nom , " table vide"
return
from Stats.utiles import writeFile
Bok=writeFile(monFichier,texteSauve)
if Bok :
print "sauvegarde de : " , self.nom , " effectuee "
else :
print "pas de sauvegarde de : " , self.nom , " IOerror"
def importFromCSV(self,folder,force):
monFichier=folder+"/Sauve_"+str(self.nom)+'.csv'
try :
f=open(monFichier,'r')
except:
print "Pas de chargement de la table ", self.nom
print "Impossible d'ouvrir le fichier ", monFichier
return 0
lignes=f.readlines()
enTete=tuple(lignes[0][0:-1].split(";"))
if enTete!=self.FieldStringList:
print "Pas de chargement de la table ", self.nom
print "les entetes ne correspondent pas"
return 0
for StrVal in lignes[1:]:
listeVal=tuple(StrVal[0:-1].split(";"))
listeValTypee=[]
for i in range(len(listeVal)):
if self.FieldTypeListe[i]=='int' : listeValTypee.append(int(listeVal[i]))
if self.FieldTypeListe[i]=='float': listeValTypee.append(float(listeVal[i]))
if self.FieldTypeListe[i]=='str' : listeValTypee.append(listeVal[i])
if force==1 : self.insereOuRemplaceLigne(tuple(listeValTypee))
if force==0 : self.insereLigne(tuple(listeValTypee))