Load Brazilian Correios' e-DNE Basico text files into your database to enable CEP search
Project description
e-DNE Correios Loader
Carregue todos os CEPs do Brasil no seu banco de dados com um único comando.
O e-DNE (Diretório Nacional de Endereços) dos Correios contém mais de 1,5 milhão de CEPs e está disponível gratuitamente. Esta ferramenta baixa automaticamente a versão mais recente, processa os arquivos e carrega em qualquer banco de dados (PostgreSQL, MySQL, SQLite, etc.), criando uma tabela unificada pronta para consulta.
uvx edne-correios-loader load --database-url sqlite:///dne.db
English version 🇺🇸
Quick Start
Com uv instalado, execute diretamente sem precisar instalar:
uvx edne-correios-loader load --database-url sqlite:///dne.db
Para PostgreSQL:
uvx --from 'edne-correios-loader[postgresql]' edne-correios-loader load \
--database-url postgresql://user:pass@localhost:5432/mydb
Após a importação, consulte CEPs:
$ edne-correios-loader query-cep --database-url sqlite:///dne.db 01001000
{
"cep": "01001000",
"logradouro": "Praça da Sé",
"complemento": null,
"bairro": "Sé",
"municipio": "São Paulo",
"municipio_cod_ibge": 3550308,
"uf": "SP",
"nome": null
}
O que faz
- Baixa automaticamente o e-DNE Básico do site dos Correios
- Processa os arquivos de texto e carrega em um banco de dados
- Cria uma tabela unificada para consulta de CEPs (não inclusa no DNE original)
- Suporta PostgreSQL, MySQL, SQLite e outros bancos via SQLAlchemy
- Permite personalizar os nomes das tabelas criadas
- Atualiza os dados sem interrupção do serviço (transação atômica)
- Atualizações quinzenais: basta rodar o comando novamente
Instalação
Caso prefira instalar o pacote ao invés de usar uvx:
pip install edne-correios-loader
Também será necessário instalar o driver do banco de dados que será utilizado:
PostgreSQL
pip install edne-correios-loader[postgresql]
Se não houver uma versão compilada do psycopg2 para seu sistema operacional e versão do python,
outra opção é instalar o driver pg8000, escrito totalmente em Python.
MySQL
pip install edne-correios-loader[mysql]
SQLite
O Python já disponibiliza a biblioteca sqlite3, não é necessária nenhuma instrução adicional.
Outros
Qualquer banco de dados suportado pelo SQLAlchemy pode ser utilizado, como Microsoft SQL Server e Oracle.
Utilização
Linha de comando
$ edne-correios-loader load --help
Usage: edne-correios-loader load [OPTIONS]
Load DNE data into a database.
Options:
-s, --dne-source <path/zip-file/url>
Path or URL with the DNE file/dir to be
imported
-db, --database-url <url> Database URL where the DNE data will be
imported to [required]
--tables [unified-cep-only|cep-tables|all]
Which tables to keep in the database after
the import
--table-name <original=custom> Rename a table: --table-name original=custom
-v, --verbose Enables verbose mode.
-h, --help Show this message and exit.
Opções
-
--dne-source(opcional)Origem do e-DNE a ser importado. Pode ser:
- Uma URL apontando para um arquivo ZIP com o e-DNE
- O caminho local para um arquivo ZIP com o e-DNE
- O caminho local para um diretório contendo os arquivos do e-DNE
Se essa opção não for informada, o último e-DNE Básico disponível no site dos Correios será baixado automaticamente e utilizado como fonte.
-
--database-url(obrigatório)URL do banco de dados onde os dados do e-DNE serão importados. A URL deve seguir o padrão
dialect+driver://username:password@host:port/database, onde:dialecté o nome do banco de dados, comopostgresql,mysql,sqlite, etc.driveré o nome do driver do banco de dados, comopsycopg2,mysqlclient,pg8000, etc. Se não especificado, o driver mais popular é utilizado automaticamente.usernameé o nome de usuário do banco de dadospasswordé a senha do usuário do banco de dadoshosté o endereço do servidor do banco de dadosporté a porta do servidor do banco de dadosdatabaseé o nome do banco de dados
Mais informações sobre o formato da URL podem ser encontradas na documentação do SQLAlchemy
-
--tables(opcional)Define quais tabelas serão mantidas no banco de dados após a importação. Pode ser:
unified-cep-only: Mantém apenas a tabela unificada de CEPscep-tables: Mantém apenas as tabelas com CEPs, separadas por tipoall: Mantém todas as tabelas do DNE
Quando não especificado, a opção
unified-cep-onlyé utilizada por padrão, mantendo apenas a tabela unificada de CEPs. -
--table-name(opcional)Permite personalizar o nome de uma tabela no banco de dados. Pode ser utilizado múltiplas vezes para renomear várias tabelas. O formato é
original=custom, ondeoriginalé o nome padrão da tabela ecustomé o nome desejado.Exemplo:
--table-name cep_unificado=correios_cepÚtil para integrar com projetos que seguem convenções de nomeação das tabelas.
-
--verbose(opcional)Habilita o modo verboso, que exibe informações de DEBUG úteis para resolver problemas na execução do comando
Exemplos de uso
Importa o e-DNE Básico direto do site dos Correios para um banco de dados SQLite local:
edne-correios-loader load --database-url sqlite:///dne.db
O mesmo para PostgreSQL:
edne-correios-loader load --database-url postgresql://user:pass@localhost:5432/mydb
Renomeando a tabela unificada:
edne-correios-loader load \
--database-url sqlite:///dne.db \
--table-name cep_unificado=correios_cep
Consulta de CEPs
Após a importação, é possível checar se os dados foram importados corretamente consultando
CEPs na tabela unificada através do comando edne-correios-loader query-cep.
Se a tabela unificada foi renomeada durante a importação, use a opção --cep-table-name:
edne-correios-loader query-cep --database-url sqlite:///dne.db --cep-table-name correios_cep 01001000
API Python
O edne-correios-loader também pode ser utilizado como uma biblioteca Python, através
do módulo edne_correios_loader. Exemplo:
from edne_correios_loader import DneLoader, TableSetEnum
DneLoader(
# URL de conexão com o banco de dados (obrigatório)
'postgresql://user:pass@localhost:5432/mydb',
# Caminho ou URL para o arquivo ZIP ou diretório com os arquivos do e-DNE (opcional)
# Quando omitido, o e-DNE será baixado automaticamente do site dos Correios
dne_source="/path/to/dne.zip",
# Personaliza os nomes das tabelas no banco de dados (opcional)
# Aceita um dict ou um callable que transforma os nomes
table_names={"cep_unificado": "correios_cep"},
).load(
# Quais tabelas manter no banco de dados após a importação (opcional)
# quando omitido apenas a tabela unificada é mantida
# Outras opções são TableSetEnum.CEP_TABLES e TableSetEnum.ALL
table_set=TableSetEnum.CEP_TABLES
)
O parâmetro table_names também aceita um callable para transformar todos os nomes:
DneLoader(
'sqlite:///dne.db',
table_names=lambda name: f"dne_{name}", # dne_cep_unificado, dne_log_localidade, etc.
).load()
Após a importação, os CEPs podem ser consultados na tabela unificada através da classe CepQuerier:
from edne_correios_loader import CepQuerier
# Se a tabela foi renomeada, informe o nome personalizado
cep_querier = CepQuerier(
'postgresql://user:pass@localhost:5432/mydb',
cep_table_name='correios_cep', # opcional, padrão: 'cep_unificado'
)
cep = cep_querier.query('01319010')
assert cep == {
'cep': '79290000',
'logradouro': None,
'complemento': None,
'bairro': None,
'municipio': 'Bonito',
'municipio_cod_ibge': 5002209,
'uf': 'MS',
'nome': None
}
Atualização dos CEPs
Quinzenalmente os Correios atualizam o e-DNE com novos CEPs. Para atualizar sua base de dados,
basta executar novamente o comando load. O e-DNE mais recente será baixado
automaticamente do site dos Correios.
Todo o processo é executado em uma transação, portanto, outros clientes conectados no banco continuarão tendo acesso aos dados antigos enquanto a atualização é executada. Se algo der errado durante a atualização, a transação será desfeita e os dados antigos serão mantidos.
Testes
Para executar os testes, é necessário a instalação do Docker e do uv. Após a instalação:
- Clone o projeto:
git clone https://github.com/cauethenorio/edne-correios-loader
- Rode os containers Docker com MySQL e PostgreSQL:
cd edne-correios-loader/tests
docker compose up -d
- Execute os testes usando o
uv:
uv run pytest tests
Licença
Esse projeto é distribuído sob os termos da licença MIT.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file edne_correios_loader-1.2.0.tar.gz.
File metadata
- Download URL: edne_correios_loader-1.2.0.tar.gz
- Upload date:
- Size: 98.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee9dbe08f931c17406466abdcf0ac66adb14b6138ac98ced412f5c4f5a49b3c9
|
|
| MD5 |
96528433436f462d24565cd177f73c73
|
|
| BLAKE2b-256 |
ab4f83103435844f589fcfa286776fb08f8e039520ccc8e64bc1e518bcd9b362
|
File details
Details for the file edne_correios_loader-1.2.0-py3-none-any.whl.
File metadata
- Download URL: edne_correios_loader-1.2.0-py3-none-any.whl
- Upload date:
- Size: 22.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92e9f00af648223621f03535f265c3f96533fc8f2a5a64b8858ff0fcfd50a7ca
|
|
| MD5 |
79e9cdb289cd2712c76fd0c215411c5c
|
|
| BLAKE2b-256 |
b23a3cecbdc715a7f7fb3e0dd54464ba310966c9b27eb854464f4da5252be203
|