rendered paste body#-*- coding: latin1 -*-
from string import join
from math import ceil
class DataLoad(object):
PlanilhaPath = 'dump_inicial.csv'
CategoriasPath = 'categorias.csv'
DumpPath = 'dump.sql'
TableLocacao = ('fk_categoria','proprietario','responsavel','nascimento','cpf','rg','profissao','locacao','endereco','bairro','cidade','estado','cep','ddd','telefone','ddd_celular','celular','ddd_comercial','telefone_c','ddd','fax','email','observacoes','valores','som','animais','pesquisa','posicao','fotografo','fotos_data','banco_nome','banco_cpf','banco_banco', 'banco_agencia', 'banco_conta')
DbName = 'primeiraproducao'
MaxInserts = 50
def __init__(self):
print 'Processando...'
self.DictCategorias = {}
Data = {}
Data['DbName'] = self.DbName
print 'Dicionario Estrutural carregado.'
Data['Categorias'] = self.Load('categorias', self.CategoriasPath)
print 'Categorias carregadas.'
DataMatriz = self.Load('planilha', self.PlanilhaPath)
print 'Planilha Carregada.'
Template = SqlTemplate(int(ceil(self.NumReg/self.MaxInserts)))
print 'Template carregado.'
Template = Template.str % Data
a = file('teste.txt', 'w')
a.writelines(DataMatriz)
a.close()
#print len(DataMatriz)
Template = Template % DataMatriz
try:
File = open(self.DumpPath, 'wt')
File.write(Template)
File.close()
except:
print '<ERRO> Ocorreu um erro na gravação do arquivo DUMP.'
else:
print 'Arquivo SQL gravado.'
def __del__(self):
print 'Ok.'
def Load(self, who, CsvPath):
try:
File = open(CsvPath)
CsvFile = File.readlines()
File.close()
except:
print '<ERRO> Ocorreu um erro no carregamento do arquivo CSV.'
else:
if who == 'planilha':
return self.LoadPlanilha(CsvFile)
elif who == 'categorias':
return self.LoadCategorias(CsvFile)
def LoadPlanilha(self, CsvFile):
del CsvFile[0] #deleta rotulos
self.NumReg = len(CsvFile)
Steps = ceil(self.NumReg/self.MaxInserts)
Matriz, List = '', []
for Line in CsvFile:
Campos = Line.split('|')
Campos[0] = self.DictCategorias[Campos[0].upper().strip(' ')] #troca da categoria por índice
Campos[13] = Campos[13]+Campos[14] #DDD + telefone
Campos[15] = Campos[15]+Campos[16] #DDD_celular + celular
Campos[17] = Campos[17]+Campos[18] #DDD_comercial + telefone_comercial
Campos[19] = Campos[19]+Campos[20] #DDD_fax + fax
del Campos[14], Campos[16], Campos[18], Campos[20]
#Forma lista de registros
Dados = []
for Item in Campos:
if isinstance(Item, str):
Temp = Item.replace('\n','').strip(' ')
else:
Temp = Item
Dados.append(Temp)
List.append('(%s)' % ', '.join(str(D) for D in Dados))
#Salva Conjunto de Inserts
if len(List) == self.MaxInserts:
Matriz += '"%s",\n' % ',\n'.join(str(L) for L in List)
List = []
Steps -= 1
#Salva Inserts restantes
if Steps > 0:
Matriz += ('"%s",\n' % ',\n'.join(str(L) for L in List))
#Retorna Matriz
return tuple('(%s)' % Matriz)
def LoadCategorias(self, CsvFile):
List = []
Index = 0
for WordLine in CsvFile:
WordLine = WordLine.replace('\n','').strip(' ')
if not self.DictCategorias.has_key(WordLine):
Index += 1
self.DictCategorias[WordLine.upper()] = Index
List.append("('%s')" % WordLine)
return join(List, ',\n')
class SqlTemplate(object):
UseDb = 'USE `%(DbName)s`;\n\n'
InsertCategoria = '''INSERT INTO `%(DbName)s`.`categoria` (`nome`) VALUES
%(Categorias)s;\n\n'''
InsertLocacao = '''INSERT INTO `%(DbName)s`.`locacao` (`fk_categoria`,`proprietario`,`responsavel`,`nascimento`,`cpf`,`rg`,`profissao`,`locacao`,`endereco`,`bairro`,`cidade`,`estado`,`cep`,`telefone`,`celular`,`telefone_c`,`fax`,`email`,`observacoes`,`valores`,`som`,`animais`,`pesquisa`,`posicao`,`fotografo`,`fotos_data`,`banco_nome`,`banco_cpf`,`banco_banco`, `banco_agencia`, `banco_conta`) VALUES
%%s;'''
def __init__(self, NumInserts):
Inserts = '\n\n'.join(self.InsertLocacao for i in range(NumInserts))
self.str = self.UseDb + self.InsertCategoria + Inserts
if __name__ == '__main__':
load = DataLoad()