Skip to content

Instantly share code, notes, and snippets.

@luzfcb
Last active December 18, 2017 17:17
Show Gist options
  • Save luzfcb/e6f0238567a9f22a4d2f32f4b54a03e0 to your computer and use it in GitHub Desktop.
Save luzfcb/e6f0238567a9f22a4d2f32f4b54a03e0 to your computer and use it in GitHub Desktop.
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