Last active
December 18, 2017 17:17
-
-
Save luzfcb/e6f0238567a9f22a4d2f32f4b54a03e0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
from dateutil import parser | |
import pandas | |
from django.conf import settings | |
from iptu.core.models import Iptu | |
def gera_db_iptu(): | |
chunksize = 10000 | |
contador = 0 | |
data_file = os.path.join(settings.BASE_DIR, 'iptu/core/static/data/IPTU_2017.csv') | |
data = pandas.read_csv(data_file, delimiter=';', encoding='iso-8859-1', iterator=True, chunksize=chunksize, decimal=',', | |
converters={'FASE DO CONTRIBUINTE': int, 'DATA DO CADASTRAMENTO': parser.parse}) | |
minha_lista = [] | |
for d in data: | |
minha_instancia_de_iptu = Iptu( | |
num_contrib=d['NUMERO DO CONTRIBUINTE'], | |
ano_exerc=d['ANO DO EXERCICIO'], | |
num_nl=d['NUMERO DA NL'], | |
data_cadastro=d['DATA DO CADASTRAMENTO'], | |
tipo_contrib_1=d['TIPO DE CONTRIBUINTE 1'], | |
doc_contrib_1=d['CPF/CNPJ DO CONTRIBUINTE 1'], | |
nome_contrib_1=d['NOME DO CONTRIBUINTE 1'], | |
tipo_contrib_2=d['TIPO DE CONTRIBUINTE 2'], | |
doc_contrib_2=d['CPF/CNPJ DO CONTRIBUINTE 2'], | |
nome_contrib_2=d['NOME DO CONTRIBUINTE 2'], | |
num_condominio=d['NUMERO DO CONDOMINIO'], | |
codlog_imovel=d['CODLOG DO IMOVEL'], | |
logradouro_imovel=d['NOME DE LOGRADOURO DO IMOVEL'], | |
num_imovel=d['NUMERO DO IMOVEL'], | |
complemento_imovel=d['COMPLEMENTO DO IMOVEL'], | |
bairro_imovel=d['BAIRRO DO IMOVEL'], | |
ref_imovel=d['REFERENCIA DO IMOVEL'], | |
cep_imovel=d['CEP DO IMOVEL'], | |
esq_frente=d['QUANTIDADE DE ESQUINAS/FRENTES'], | |
fracao_ideal=d['FRACAO IDEAL'], | |
area_terreno=['AREA DO TERRENO'], | |
area_contruida=d['AREA CONSTRUIDA'], | |
area_ocupada=d['AREA OCUPADA'], | |
valor_m2_terreno=d['VALOR DO M2 DO TERRENO'], | |
valor_m2_construido=d['VALOR DO M2 DE CONSTRUCAO'], | |
ano_construcao=d['ANO DA CONSTRUCAO CORRIGIDO'], | |
qde_pavimentos=d['QUANTIDADE DE PAVIMENTOS'], | |
testada_calculo=d['TESTADA PARA CALCULO'], | |
tipo_uso=d['TIPO DE USO DO IMOVEL'], | |
tipo_construcao=d['TIPO DE PADRAO DA CONSTRUCAO'], | |
tipo_terreno=d['TIPO DE TERRENO'], | |
fator_obsolencia=d['FATOR DE OBSOLESCENCIA'], | |
ano_inicio_vida_contrib=d['ANO DE INICIO DA VIDA DO CONTRIBUINTE'], | |
mes_inicio_vida_contrib=d['MES DE INICIO DA VIDA DO CONTRIBUINTE'], | |
fase_contrib=d['FASE DO CONTRIBUINTE'], | |
) | |
minha_lista.append(minha_instancia_de_iptu) | |
if contador >= chunksize: | |
# insere no banco os objetos contidos em minha_lista | |
# de 5000 em 5000 | |
Iptu.objects.bulk_create(minha_lista, batch_size=5000) | |
# deleta minha_lista, ou seja, marca para o interpretador Python | |
# remover os objetos da memoria, qnd eles não forem mais referenciados | |
del minha_lista | |
# cria a lista novamente | |
minha_lista = [] | |
# zero a contador | |
contador = 0 | |
else: | |
contador = contador + 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment