diff --git a/.gitignore b/.gitignore index a0c7648..7bcc2e8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,17 @@ +WebScrapper/oracle_data/* +WebScrapper/indicators_data/* +WebScrapper/test_supabase +WebScrapper/DataETL/.env* +WebScrapper/Selenium.ipynb +WebScrapper/BeautifulSoup.py +WebScrapper/DataETL/__pycache__/* +WebScrapper/DataETL/src/__pycache__/* +WebScrapper/DataScraper/__pycache__/* +WebScrapper/test_supabase.py +WebScrapper/BeautifulSoup.py +WebScrapper/Selenium.ipynb +WebScrapper/DataETL/models/__pycache__/* + node_modules # testing @@ -7,5 +21,5 @@ node_modules /dist -.env -.vercel +.env +.vercel diff --git a/Database/docker-compose.yaml b/Database/docker-compose.yaml new file mode 100644 index 0000000..1bd66b2 --- /dev/null +++ b/Database/docker-compose.yaml @@ -0,0 +1,32 @@ +# Use postgres/example user/password credentials +version: '3.9' + +services: + + db: + container_name: postgres_container + image: postgres + restart: always + shm_size: 128mb + volumes: + - ~/Documentos/UnB/Disciplinas/2024-1-EducaMinas-backend/Database/postgres:/data/postgres + environment: + POSTGRES_USER: user + POSTGRES_PASSWORD: s40028922 + POSTGRES_DB: base_de_dados + PGDATA: /data/postgres + ports: + - "5432:5432" + + adminer: + container_name: adminer + image: adminer + restart: unless-stopped + ports: + - 8080:8080 + depends_on: + - db + +networks: + default: + driver: bridge diff --git a/WebScrapper/DataETL/ETLDebugger.ipynb b/WebScrapper/DataETL/ETLDebugger.ipynb new file mode 100644 index 0000000..77cd3f7 --- /dev/null +++ b/WebScrapper/DataETL/ETLDebugger.ipynb @@ -0,0 +1,3573 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "\n", + "import pandas as pd\n", + "import os\n", + "\n", + "from sqlalchemy import create_engine, Column, Integer, Float, String, ForeignKey, UniqueConstraint, func\n", + "from sqlalchemy.orm import DeclarativeBase, Session\n", + "\n", + "from dotenv import dotenv_values\n", + "\n", + "from municipio_id import municipio_map" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## DATA FILTER CLASS" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- transformar tudo para o tipo de dado do banco de dados, se possivel com SQLALCHEMY" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "class InepFilters():\n", + " # csv_path is path source folder + file name\n", + " def __init__(self, csv_path) -> None:\n", + " self.__file_path = csv_path\n", + " source_path, self.__file_name = os.path.split(csv_path)\n", + " if '__' not in self.__file_name:\n", + " pattern = r'(\\d{4})_(\\w+)_(\\w+)_(\\w+)\\.csv'\n", + " else:\n", + " pattern = r'(\\d{4})_(\\w+)__(\\w+)\\.csv'\n", + " self.__filters = re.findall(pattern, self.__file_name)[0]\n", + "\n", + " self.__correspondents = {\n", + " 'EnsinoFundamental': 'EF',\n", + " 'AnosIniciais': '1',\n", + " 'AnosFinais': '2',\n", + " 'TodososValoresdeColunas': 'todos',\n", + " 'EnsinoMdio': 'EM',\n", + " }\n", + "\n", + " self.__year()\n", + " self.__teaching_stage()\n", + "\n", + " def __year(self):\n", + " self.__year = int(self.__filters[0])\n", + "\n", + " def __teaching_stage(self):\n", + " self.__teaching_stage = self.__correspondents[self.__filters[1]]\n", + " if self.__teaching_stage == 'EF':\n", + " level = self.__correspondents[self.__filters[2]]\n", + " if level != 'todos':\n", + " self.__teaching_stage += level\n", + "\n", + " # getters\n", + " def get_year(self):\n", + " return self.__year\n", + "\n", + " def get_teaching_stage(self):\n", + " return self.__teaching_stage\n", + "\n", + " def get_file_name(self):\n", + " return self.__file_name\n", + "\n", + " def get_file_path(self):\n", + " return self.__file_path\n", + "\n", + " def get_df(self) -> pd.DataFrame:\n", + " return pd.read_csv(self.__file_path, sep=';')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## OFICIAL: Get path from categories and reading and group all file by path" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12\n" + ] + } + ], + "source": [ + "def transform_file_path() -> list:\n", + " source_path_data = os.path.abspath(os.path.join(os.getcwd(), \"../oracle_data\"))\n", + " category_files = [os.path.join(source_path_data, i) for i in os.listdir(source_path_data)]\n", + " return category_files\n", + "\n", + "all_path_files = transform_file_path()\n", + "print(len(all_path_files))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## OFICIAL: GEN LIST INSTANCE FILTER BY PATH_FILE" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12\n" + ] + } + ], + "source": [ + "all_category_objs = [InepFilters(i) for i in all_path_files]\n", + "print(len(all_category_objs))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### TEST: full_table_data (DISPOSABLE)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "arquivo1 = all_category_objs[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PaísRegiãoUFMunicípioquantidadecor_racadependencia_administrativaetapa_de_ensinoanomunicipio_id
0BrasilSudesteMGAbadia dos Dourados122BrancaEstadualEM20233100104
1BrasilSudesteMGAbadia dos Dourados2Não declaradaEstadualEM20233100104
2BrasilSudesteMGAbadia dos Dourados80PardaEstadualEM20233100104
3BrasilSudesteMGAbadia dos Dourados7PretaEstadualEM20233100104
4BrasilSudesteMGAbaeté244BrancaEstadualEM20233100203
.................................
4924BrasilSudesteMGVolta Grande82PardaEstadualEM20233172103
4925BrasilSudesteMGVolta Grande29PretaEstadualEM20233172103
4926BrasilSudesteMGWenceslau Braz70BrancaEstadualEM20233172202
4927BrasilSudesteMGWenceslau Braz36PardaEstadualEM20233172202
4928BrasilSudesteMGWenceslau Braz3PretaEstadualEM20233172202
\n", + "

4929 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " País Região UF Município quantidade cor_raca \\\n", + "0 Brasil Sudeste MG Abadia dos Dourados 122 Branca \n", + "1 Brasil Sudeste MG Abadia dos Dourados 2 Não declarada \n", + "2 Brasil Sudeste MG Abadia dos Dourados 80 Parda \n", + "3 Brasil Sudeste MG Abadia dos Dourados 7 Preta \n", + "4 Brasil Sudeste MG Abaeté 244 Branca \n", + "... ... ... .. ... ... ... \n", + "4924 Brasil Sudeste MG Volta Grande 82 Parda \n", + "4925 Brasil Sudeste MG Volta Grande 29 Preta \n", + "4926 Brasil Sudeste MG Wenceslau Braz 70 Branca \n", + "4927 Brasil Sudeste MG Wenceslau Braz 36 Parda \n", + "4928 Brasil Sudeste MG Wenceslau Braz 3 Preta \n", + "\n", + " dependencia_administrativa etapa_de_ensino ano municipio_id \n", + "0 Estadual EM 2023 3100104 \n", + "1 Estadual EM 2023 3100104 \n", + "2 Estadual EM 2023 3100104 \n", + "3 Estadual EM 2023 3100104 \n", + "4 Estadual EM 2023 3100203 \n", + "... ... ... ... ... \n", + "4924 Estadual EM 2023 3172103 \n", + "4925 Estadual EM 2023 3172103 \n", + "4926 Estadual EM 2023 3172202 \n", + "4927 Estadual EM 2023 3172202 \n", + "4928 Estadual EM 2023 3172202 \n", + "\n", + "[4929 rows x 10 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "df = arquivo1.get_df()\n", + "# df = df.sort_values(by='Categoria 1 - Ordenação')\n", + "df.rename(columns={'Categoria 1': 'cor_raca',\n", + " 'Matrículas': 'quantidade',\n", + " 'Categoria 2': 'dependencia_administrativa'}, inplace=True)\n", + "df.drop(columns=[\n", + " 'Etapa de Ensino - Superior', 'Etapa de Ensino', 'Localidade da Escola', 'Categoria 1 - Ordenação', 'Categoria 2 - Ordenação'], inplace=True)\n", + "df['etapa_de_ensino'] = arquivo1.get_teaching_stage()\n", + "df['ano'] = arquivo1.get_year()\n", + "df['municipio_id'] = df['Município'].map(municipio_map)\n", + "display(df)\n", + "# verifica se todos os valores da coluna tem tal valor\n", + "print((df['UF'] == 'MG').all())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "lines_with_nan = df[df.isna().any(axis=1)]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PaísRegiãoUFMunicípioquantidadecor_racadependencia_administrativaetapa_de_ensinoanomunicipio_id
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [País, Região, UF, Município, quantidade, cor_raca, dependencia_administrativa, etapa_de_ensino, ano, municipio_id]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(lines_with_nan)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# OFICIAL CODE:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Organizing table for insert" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "def make_full_table(data_filters: InepFilters) -> pd.DataFrame:\n", + " df = data_filters.get_df()\n", + " df.rename(columns={'Categoria 1': 'cor_raca',\n", + " 'Matrículas': 'quantidade',\n", + " 'Categoria 2': 'dependencia_administrativa'}, inplace=True)\n", + " df.drop(columns=[\n", + " 'Etapa de Ensino - Superior', 'Etapa de Ensino', 'Localidade da Escola', 'Categoria 1 - Ordenação', 'Categoria 2 - Ordenação'], inplace=True)\n", + " df['etapa_de_ensino'] = data_filters.get_teaching_stage()\n", + " df['ano'] = data_filters.get_year()\n", + " df['municipio_id'] = df['Município'].map(municipio_map)\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "config = dotenv_values(\"./.env\")\n", + "username = config.get(\"DATABASE_USERNAME\")\n", + "password = config.get(\"DATABASE_PASSWORD\")\n", + "dbname = config.get(\"DATABASE_NAME\")\n", + "port = config.get(\"DATABASE_PORT\")\n", + "host = config.get(\"DATABASE_HOST\")\n", + "\n", + "print(f'host={host}\\n'\n", + " + f'database={dbname}\\n'\n", + " + f'user={username}\\n'\n", + " + f'password={password}\\n'\n", + " + f'port={port}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Settings database and create SQLALCHEMY engine" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "config = dotenv_values(\"./.env\")\n", + "username = config.get(\"DATABASE_USERNAME\")\n", + "password = config.get(\"DATABASE_PASSWORD\")\n", + "dbname = config.get(\"DATABASE_NAME\")\n", + "port = config.get(\"DATABASE_PORT\")\n", + "host = config.get(\"DATABASE_HOST\")\n", + "\n", + "engine = create_engine(\n", + " f\"postgresql+psycopg2://{username}:{password}@{host}:{port}/{dbname}\", echo=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# inserting in database -> refactore" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## necessity apply design patterns: [Design Patterns](https://refactoring.guru/)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ORM AND CREATE TABLES" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "class Base(DeclarativeBase):\n", + " ..." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-28 00:18:17,671 INFO sqlalchemy.engine.Engine select pg_catalog.version()\n", + "2024-08-28 00:18:17,679 INFO sqlalchemy.engine.Engine [raw sql] {}\n", + "2024-08-28 00:18:18,002 INFO sqlalchemy.engine.Engine select current_schema()\n", + "2024-08-28 00:18:18,005 INFO sqlalchemy.engine.Engine [raw sql] {}\n", + "2024-08-28 00:18:18,303 INFO sqlalchemy.engine.Engine show standard_conforming_strings\n", + "2024-08-28 00:18:18,308 INFO sqlalchemy.engine.Engine [raw sql] {}\n", + "2024-08-28 00:18:18,606 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:18:18,616 INFO sqlalchemy.engine.Engine SELECT pg_catalog.pg_class.relname \n", + "FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace \n", + "WHERE pg_catalog.pg_class.relname = %(table_name)s AND pg_catalog.pg_class.relkind = ANY (ARRAY[%(param_1)s, %(param_2)s, %(param_3)s, %(param_4)s, %(param_5)s]) AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != %(nspname_1)s\n", + "2024-08-28 00:18:18,619 INFO sqlalchemy.engine.Engine [generated in 0.00269s] {'table_name': 'Municipio', 'param_1': 'r', 'param_2': 'p', 'param_3': 'f', 'param_4': 'v', 'param_5': 'm', 'nspname_1': 'pg_catalog'}\n", + "2024-08-28 00:18:18,921 INFO sqlalchemy.engine.Engine SELECT pg_catalog.pg_class.relname \n", + "FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace \n", + "WHERE pg_catalog.pg_class.relname = %(table_name)s AND pg_catalog.pg_class.relkind = ANY (ARRAY[%(param_1)s, %(param_2)s, %(param_3)s, %(param_4)s, %(param_5)s]) AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != %(nspname_1)s\n", + "2024-08-28 00:18:18,922 INFO sqlalchemy.engine.Engine [cached since 0.3061s ago] {'table_name': 'Filtro', 'param_1': 'r', 'param_2': 'p', 'param_3': 'f', 'param_4': 'v', 'param_5': 'm', 'nspname_1': 'pg_catalog'}\n", + "2024-08-28 00:18:19,075 INFO sqlalchemy.engine.Engine SELECT pg_catalog.pg_class.relname \n", + "FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace \n", + "WHERE pg_catalog.pg_class.relname = %(table_name)s AND pg_catalog.pg_class.relkind = ANY (ARRAY[%(param_1)s, %(param_2)s, %(param_3)s, %(param_4)s, %(param_5)s]) AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != %(nspname_1)s\n", + "2024-08-28 00:18:19,077 INFO sqlalchemy.engine.Engine [cached since 0.4606s ago] {'table_name': 'Matricula', 'param_1': 'r', 'param_2': 'p', 'param_3': 'f', 'param_4': 'v', 'param_5': 'm', 'nspname_1': 'pg_catalog'}\n", + "2024-08-28 00:18:19,233 INFO sqlalchemy.engine.Engine SELECT pg_catalog.pg_class.relname \n", + "FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace \n", + "WHERE pg_catalog.pg_class.relname = %(table_name)s AND pg_catalog.pg_class.relkind = ANY (ARRAY[%(param_1)s, %(param_2)s, %(param_3)s, %(param_4)s, %(param_5)s]) AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != %(nspname_1)s\n", + "2024-08-28 00:18:19,234 INFO sqlalchemy.engine.Engine [cached since 0.6174s ago] {'table_name': 'Indicador', 'param_1': 'r', 'param_2': 'p', 'param_3': 'f', 'param_4': 'v', 'param_5': 'm', 'nspname_1': 'pg_catalog'}\n", + "2024-08-28 00:18:19,386 INFO sqlalchemy.engine.Engine COMMIT\n" + ] + } + ], + "source": [ + "class Municipio(Base):\n", + " __tablename__ = 'Municipio'\n", + " id = Column(Integer, primary_key=True, autoincrement=True, default=None)\n", + " nome = Column(String, nullable=False, unique=True)\n", + " UF = Column(String, nullable=False)\n", + "\n", + "\n", + "class Filtro(Base):\n", + " __tablename__ = 'Filtro'\n", + "\n", + " id = Column(Integer, primary_key=True, autoincrement=True)\n", + " municipio_id = Column(Integer, ForeignKey('Municipio.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False)\n", + " etapa_de_ensino = Column(String(5), nullable=False)\n", + " ano = Column(Integer, nullable=False)\n", + "\n", + " __table_args__ = (UniqueConstraint(\n", + " 'municipio_id', 'etapa_de_ensino', 'ano', name='unique_municipio_etapa_ano'),)\n", + "\n", + "\n", + "class Matricula(Base):\n", + " __tablename__ = 'Matricula'\n", + " id = Column(Integer, primary_key=True, autoincrement=True)\n", + " id_filtro = Column(Integer, ForeignKey('Filtro.id'), nullable=False)\n", + " cor_raca = Column(String(20), nullable=True)\n", + " dependencia_administrativa = Column(String(20), nullable=True)\n", + " quantidade = Column(Integer, nullable=True)\n", + "\n", + "class Indicador(Base):\n", + " __tablename__ = 'Indicador'\n", + " id = Column(Integer, primary_key=True, autoincrement=True)\n", + " id_filtro = Column(Integer, ForeignKey('Filtro.id'), nullable=False)\n", + " dependencia_administrativa = Column(String(20), nullable=True)\n", + " taxa_de_aprovacao = Column(Float, nullable=True)\n", + " taxa_de_reprovacao = Column(Float, nullable=True)\n", + " taxa_de_abandono = Column(Float, nullable=True)\n", + "\n", + "\n", + "# Configuração do banco de dados\n", + "Base.metadata.create_all(engine)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Verifica se o filtro existe. Se não existir, cria e retorna o ID" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "def get_existing_filters():\n", + " # Obtém todos os filtros existentes no banco de dados\n", + " with Session(engine) as session:\n", + " existing_filtros = session.query(Filtro).all()\n", + " # Converte em um dicionário para acesso rápido\n", + " filter_dict = {(f.municipio_id, f.etapa_de_ensino, f.ano): f.id for f in existing_filtros}\n", + " return filter_dict" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define checkpoints functions" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "script_path = os.getcwd() # os.path.dirname(os.path.realpath(__file__)) not works in ipynb\n", + "CHECKPOINT_FILE = os.path.abspath(os.path.join(script_path, '.data_checkpoint.log'))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "def save_checkpoint(file_name):\n", + " with open(CHECKPOINT_FILE, \"w\") as f:\n", + " f.write(f\"{file_name}\\n\")\n", + "\n", + "\n", + "def load_checkpoint():\n", + " if os.path.exists(CHECKPOINT_FILE):\n", + " with open(CHECKPOINT_FILE, \"r\") as f:\n", + " content = f.read().strip()\n", + " if content:\n", + " file_name = content\n", + " return file_name\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def bulk_insert_data(full_table_data: pd.DataFrame, current_file: str=None):\n", + " # Verifica o progresso do checkpoint\n", + " if current_file:\n", + " save_checkpoint(current_file)\n", + " filter_dict = get_existing_filters()\n", + " with Session(engine) as session:\n", + " matricula_objs = []\n", + "\n", + " # Processar cada linha do DataFrame\n", + " for _, row in full_table_data.iterrows():\n", + " # Obter ou criar o filtro e obter seu ID\n", + "\n", + " filter_key = (row['municipio_id'],\n", + " row['etapa_de_ensino'], row['ano'])\n", + "\n", + " if filter_key in filter_dict:\n", + " # Filtro já existe, usar o ID existente.\n", + " id_filter = filter_dict[filter_key]\n", + " else:\n", + " # Criar novo e adicionar no dicionario\n", + " filtro = Filtro(\n", + " municipio_id=row['municipio_id'], etapa_de_ensino=row['etapa_de_ensino'], ano=row['ano'])\n", + " session.add(filtro)\n", + " session.flush()\n", + " id_filter = filtro.id\n", + " filter_dict[filter_key] = id_filter\n", + "\n", + " matricula = Matricula(id_filtro=id_filter,\n", + " cor_raca=row['cor_raca'],\n", + " dependencia_administrativa=row['dependencia_administrativa'],\n", + " quantidade=row['quantidade'])\n", + " matricula_objs.append(matricula)\n", + " # Inserir em lote\n", + " session.bulk_save_objects(matricula_objs)\n", + " session.commit()\n", + " if current_file:\n", + " os.remove(CHECKPOINT_FILE)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "def alternate_file_and_insert():\n", + " checkpoint_file = load_checkpoint()\n", + " # garante que a partir de um certo index em all_category_objs, todos serao varridos\n", + " was_not_scanned = False\n", + " if not checkpoint_file:\n", + " was_not_scanned = True\n", + " for matricula_data in all_category_objs:\n", + " if was_not_scanned:\n", + " df_full_table = make_full_table(matricula_data)\n", + " bulk_insert_data(\n", + " df_full_table,\n", + " matricula_data.get_file_path())\n", + " elif checkpoint_file == matricula_data.get_file_path():\n", + " was_not_scanned = True" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "#alternate_file_and_insert()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Insert 'Todos' Columns" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "def check_and_create_all_municipios_id(session : Session):\n", + " # Verificar se o município com ID 1 existe e, se não, inseri-lo\n", + " municipio = session.query(Municipio).filter_by(id=1).first()\n", + " if not municipio:\n", + " municipio = Municipio(id=1, nome='Todos', UF='MG')\n", + " session.add(municipio)\n", + " session.commit()\n", + "\n", + "def municipios_sum_query_df(session: Session):\n", + " query = (\n", + " session.query(\n", + " Filtro.etapa_de_ensino,\n", + " Filtro.ano,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa,\n", + " func.sum(Matricula.quantidade).label('quantidade')\n", + " )\n", + " .join(Matricula, Filtro.id == Matricula.id_filtro)\n", + " .filter(Filtro.municipio_id != 1)\n", + " .filter(Filtro.etapa_de_ensino != 'Todos')\n", + " .group_by(\n", + " Filtro.etapa_de_ensino,\n", + " Filtro.ano,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa\n", + " )\n", + " .order_by(\n", + " Filtro.ano,\n", + " Filtro.etapa_de_ensino,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa\n", + " )\n", + " )\n", + "\n", + " # Executar a query\n", + " results = query.all()\n", + " # Converter resultados em DataFrame\n", + " df = pd.DataFrame(results, columns=['etapa_de_ensino', 'ano', 'cor_raca', 'dependencia_administrativa', 'quantidade'])\n", + " df['municipio_id'] = 1\n", + " \n", + " display(df)\n", + " return df\n", + "\n", + "def etapa_de_ensino_sum(session: Session):\n", + " query = (\n", + " session.query(\n", + " Filtro.municipio_id,\n", + " Filtro.ano,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa,\n", + " func.sum(Matricula.quantidade).label('quantidade')\n", + " )\n", + " .join(Matricula, Filtro.id == Matricula.id_filtro)\n", + " .filter(Filtro.municipio_id != 1)\n", + " .filter(Filtro.etapa_de_ensino != 'Todos')\n", + " .group_by(\n", + " Filtro.municipio_id,\n", + " Filtro.ano,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa\n", + " )\n", + " .order_by(\n", + " Filtro.ano,\n", + " Filtro.municipio_id,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa\n", + " )\n", + " )\n", + " \n", + " # Executar a query\n", + " results = query.all()\n", + " # Converter resultados em DataFrame\n", + " df = pd.DataFrame(results, columns=['municipio_id', 'ano', 'cor_raca', 'dependencia_administrativa', 'quantidade'])\n", + " df['etapa_de_ensino'] = 'Todos'\n", + " \n", + " display(df)\n", + " return df\n", + "\n", + "def municipios_etapa_de_ensino_sum(session: Session):\n", + " query = (\n", + " session.query(\n", + " Filtro.ano,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa,\n", + " func.sum(Matricula.quantidade).label('quantidade')\n", + " )\n", + " .join(Matricula, Filtro.id == Matricula.id_filtro)\n", + " .filter(Filtro.municipio_id != 1)\n", + " .filter(Filtro.etapa_de_ensino != 'Todos')\n", + " .group_by(\n", + " Filtro.ano,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa\n", + " )\n", + " .order_by(\n", + " Filtro.ano,\n", + " Matricula.cor_raca,\n", + " Matricula.dependencia_administrativa\n", + " )\n", + " )\n", + "\n", + " # Executar a query\n", + " results = query.all()\n", + " # Converter resultados em DataFrame\n", + " df = pd.DataFrame(results, columns=['ano', 'cor_raca', 'dependencia_administrativa', 'quantidade'])\n", + " df['etapa_de_ensino'] = 'Todos'\n", + " df['municipio_id'] = 1\n", + " \n", + " display(df)\n", + " return df\n", + "\n", + "def send_combination(session: Session):\n", + " check_and_create_all_municipios_id(session=session)\n", + " query_df = municipios_etapa_de_ensino_sum(session=session)\n", + " bulk_insert_data(full_table_data=query_df)\n", + "\n", + "def send_etapa_de_ensino_sum_to_db(session: Session):\n", + " query_df = etapa_de_ensino_sum(session=session)\n", + " bulk_insert_data(full_table_data=query_df)\n", + "\n", + "def send_municipios_sum_to_db(session: Session):\n", + " check_and_create_all_municipios_id(session=session)\n", + " query_df = municipios_sum_query_df(session=session)\n", + " bulk_insert_data(full_table_data=query_df)\n", + "\n", + "def insert_total():\n", + " with Session(engine) as session:\n", + " send_municipios_sum_to_db(session=session)\n", + " send_etapa_de_ensino_sum_to_db(session=session)\n", + " send_combination(session=session)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "#insert_total()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# INDICATORS" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### SITE FOR SCRAPPER: https://www.gov.br/inep/pt-br/acesso-a-informacao/dados-abertos/indicadores-educacionais" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "INDICATORS_PATH = os.path.abspath(os.path.join(os.getcwd(), \"../indicators_data\"))\n", + "MUNICIPIOS_FILE_PATH = os.path.join(INDICATORS_PATH, 'tx_rend_municipios_2023.xlsx')\n", + "ALL_INDICATORS_FILE_PATH = [os.path.join(INDICATORS_PATH, i) for i in os.listdir(INDICATORS_PATH)]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "df_indic = pd.read_excel(ALL_INDICATORS_FILE_PATH[2],\n", + " skiprows=8,\n", + " usecols=[\"NU_ANO_CENSO\",\n", + " \"SG_UF\",\n", + " \"CO_MUNICIPIO\",\n", + " \"NO_MUNICIPIO\",\n", + " \"NO_CATEGORIA\",\n", + " \"NO_DEPENDENCIA\",\n", + " \"1_CAT_FUN_AI\",\n", + " \"1_CAT_FUN_AF\",\n", + " \"1_CAT_MED\",\n", + " \"2_CAT_FUN_AI\",\n", + " \"2_CAT_FUN_AF\",\n", + " \"2_CAT_MED\",\n", + " \"3_CAT_FUN_AI\",\n", + " \"3_CAT_FUN_AF\",\n", + " \"3_CAT_MED\"]\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "header_map = {'NU_ANO_CENSO':'ano',\n", + " 'SG_UF':'UF',\n", + " 'CO_MUNICIPIO':'municipio_id',\n", + " 'NO_MUNICIPIO':'nome',\n", + " 'NO_CATEGORIA':'localização',\n", + " 'NO_DEPENDENCIA':'dependencia_administrativa',\n", + " '1_CAT_FUN_AI':'aprovacao_EF1',\n", + " '1_CAT_FUN_AF':'aprovacao_EF2',\n", + " '1_CAT_MED':'aprovacao_EM',\n", + " '2_CAT_FUN_AI':'reprovacao_EF1',\n", + " '2_CAT_FUN_AF':'reprovacao_EF2',\n", + " '2_CAT_MED':'reprovacao_EM',\n", + " '3_CAT_FUN_AI':'abandono_EF1',\n", + " '3_CAT_FUN_AF':'abandono_EF2',\n", + " '3_CAT_MED':'abandono_EM'\n", + " }\n", + "df_indic.rename(columns=header_map, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "df_indic = df_indic[df_indic['UF'] == 'MG']\n", + "df_indic = df_indic[df_indic['localização'] == 'Total']\n", + "df_indic = df_indic.drop(columns=['localização'])\n", + "df_indic['municipio_id'] = df_indic['municipio_id'].astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
anoUFmunicipio_idnomedependencia_administrativaaprovacao_EF1aprovacao_EF2aprovacao_EMreprovacao_EF1reprovacao_EF2reprovacao_EMabandono_EF1abandono_EF2abandono_EM
284272023MG3100104Abadia dos DouradosTotal10094.193.503.71.902.24.6
284302023MG3100104Abadia dos DouradosEstadual--94.193.5--3.71.9--2.24.6
284322023MG3100104Abadia dos DouradosMunicipal100----0----0----
284352023MG3100104Abadia dos DouradosPública10094.193.503.71.902.24.6
284382023MG3100203AbaetéTotal99.384.7790.614.77.10.10.613.9
.............................................
378842023MG3172103Volta GrandePública95.688.487.74.411.65.4006.9
378872023MG3172202Wenceslau BrazTotal96.697.798.93.42.31.1000
378902023MG3172202Wenceslau BrazEstadual--97.798.9--2.31.1--00
378922023MG3172202Wenceslau BrazMunicipal96.6----3.4----0----
378942023MG3172202Wenceslau BrazPública96.697.798.93.42.31.1000
\n", + "

3770 rows × 14 columns

\n", + "
" + ], + "text/plain": [ + " ano UF municipio_id nome dependencia_administrativa \\\n", + "28427 2023 MG 3100104 Abadia dos Dourados Total \n", + "28430 2023 MG 3100104 Abadia dos Dourados Estadual \n", + "28432 2023 MG 3100104 Abadia dos Dourados Municipal \n", + "28435 2023 MG 3100104 Abadia dos Dourados Pública \n", + "28438 2023 MG 3100203 Abaeté Total \n", + "... ... .. ... ... ... \n", + "37884 2023 MG 3172103 Volta Grande Pública \n", + "37887 2023 MG 3172202 Wenceslau Braz Total \n", + "37890 2023 MG 3172202 Wenceslau Braz Estadual \n", + "37892 2023 MG 3172202 Wenceslau Braz Municipal \n", + "37894 2023 MG 3172202 Wenceslau Braz Pública \n", + "\n", + " aprovacao_EF1 aprovacao_EF2 aprovacao_EM reprovacao_EF1 reprovacao_EF2 \\\n", + "28427 100 94.1 93.5 0 3.7 \n", + "28430 -- 94.1 93.5 -- 3.7 \n", + "28432 100 -- -- 0 -- \n", + "28435 100 94.1 93.5 0 3.7 \n", + "28438 99.3 84.7 79 0.6 14.7 \n", + "... ... ... ... ... ... \n", + "37884 95.6 88.4 87.7 4.4 11.6 \n", + "37887 96.6 97.7 98.9 3.4 2.3 \n", + "37890 -- 97.7 98.9 -- 2.3 \n", + "37892 96.6 -- -- 3.4 -- \n", + "37894 96.6 97.7 98.9 3.4 2.3 \n", + "\n", + " reprovacao_EM abandono_EF1 abandono_EF2 abandono_EM \n", + "28427 1.9 0 2.2 4.6 \n", + "28430 1.9 -- 2.2 4.6 \n", + "28432 -- 0 -- -- \n", + "28435 1.9 0 2.2 4.6 \n", + "28438 7.1 0.1 0.6 13.9 \n", + "... ... ... ... ... \n", + "37884 5.4 0 0 6.9 \n", + "37887 1.1 0 0 0 \n", + "37890 1.1 -- 0 0 \n", + "37892 -- 0 -- -- \n", + "37894 1.1 0 0 0 \n", + "\n", + "[3770 rows x 14 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display(df_indic)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "df_long = pd.melt(\n", + " df_indic,\n", + " id_vars=['ano', 'UF', 'municipio_id', 'nome', 'dependencia_administrativa'],\n", + " value_vars=['aprovacao_EF1', 'aprovacao_EF2', 'aprovacao_EM',\n", + " 'reprovacao_EF1', 'reprovacao_EF2', 'reprovacao_EM',\n", + " 'abandono_EF1', 'abandono_EF2', 'abandono_EM'],\n", + " var_name='tipo_etapa',\n", + " value_name='valor'\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "df_long[['tipo', 'etapa_de_ensino']] = df_long['tipo_etapa'].str.split('_', expand=True)\n", + "df_long.drop('tipo_etapa', axis=1, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "df_pivot = df_long.pivot_table(\n", + " index=['ano', 'UF', 'municipio_id', 'nome', 'dependencia_administrativa', 'etapa_de_ensino'],\n", + " columns='tipo',\n", + " values='valor',\n", + " aggfunc='first'\n", + ").reset_index()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
anoUFmunicipio_idMunicípiodependencia_administrativaetapa_de_ensinotaxa_de_abandonotaxa_de_aprovacaotaxa_de_reprovacao
02023MG3100104Abadia dos DouradosEstadualEF1NoneNoneNone
12023MG3100104Abadia dos DouradosEstadualEF22.294.13.7
22023MG3100104Abadia dos DouradosEstadualEM4.693.51.9
32023MG3100104Abadia dos DouradosMunicipalEF101000
42023MG3100104Abadia dos DouradosMunicipalEF2NoneNoneNone
..............................
113052023MG3172202Wenceslau BrazPúblicaEF2097.72.3
113062023MG3172202Wenceslau BrazPúblicaEM098.91.1
113072023MG3172202Wenceslau BrazTotalEF1096.63.4
113082023MG3172202Wenceslau BrazTotalEF2097.72.3
113092023MG3172202Wenceslau BrazTotalEM098.91.1
\n", + "

11310 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " ano UF municipio_id Município dependencia_administrativa \\\n", + "0 2023 MG 3100104 Abadia dos Dourados Estadual \n", + "1 2023 MG 3100104 Abadia dos Dourados Estadual \n", + "2 2023 MG 3100104 Abadia dos Dourados Estadual \n", + "3 2023 MG 3100104 Abadia dos Dourados Municipal \n", + "4 2023 MG 3100104 Abadia dos Dourados Municipal \n", + "... ... .. ... ... ... \n", + "11305 2023 MG 3172202 Wenceslau Braz Pública \n", + "11306 2023 MG 3172202 Wenceslau Braz Pública \n", + "11307 2023 MG 3172202 Wenceslau Braz Total \n", + "11308 2023 MG 3172202 Wenceslau Braz Total \n", + "11309 2023 MG 3172202 Wenceslau Braz Total \n", + "\n", + " etapa_de_ensino taxa_de_abandono taxa_de_aprovacao taxa_de_reprovacao \n", + "0 EF1 None None None \n", + "1 EF2 2.2 94.1 3.7 \n", + "2 EM 4.6 93.5 1.9 \n", + "3 EF1 0 100 0 \n", + "4 EF2 None None None \n", + "... ... ... ... ... \n", + "11305 EF2 0 97.7 2.3 \n", + "11306 EM 0 98.9 1.1 \n", + "11307 EF1 0 96.6 3.4 \n", + "11308 EF2 0 97.7 2.3 \n", + "11309 EM 0 98.9 1.1 \n", + "\n", + "[11310 rows x 9 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "object\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "df_pivot.columns.name = None\n", + "df_pivot.rename(columns={'aprovacao': 'taxa_de_aprovacao', 'reprovacao': 'taxa_de_reprovacao', 'abandono': 'taxa_de_abandono', 'nome':'Município'}, inplace=True)\n", + "with pd.option_context('future.no_silent_downcasting', True):\n", + " df_pivot['taxa_de_aprovacao'] = df_pivot['taxa_de_aprovacao'].replace({'--': np.nan})\n", + " df_pivot['taxa_de_reprovacao'] = df_pivot['taxa_de_reprovacao'].replace({'--': np.nan})\n", + " df_pivot['taxa_de_abandono'] = df_pivot['taxa_de_abandono'].replace({'--': np.nan})\n", + "\n", + "df_pivot = df_pivot.where(pd.notnull(df_pivot), None) # substitui NaN por None\n", + "display(df_pivot)\n", + "print(df_pivot['taxa_de_aprovacao'].dtype)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "def make_full_table2(indicator_file_path) -> pd.DataFrame:\n", + " df_indic = pd.read_excel(indicator_file_path,\n", + " skiprows=8,\n", + " usecols=[\"NU_ANO_CENSO\",\n", + " \"SG_UF\",\n", + " \"CO_MUNICIPIO\",\n", + " \"NO_MUNICIPIO\",\n", + " \"NO_CATEGORIA\",\n", + " \"NO_DEPENDENCIA\",\n", + " \"1_CAT_FUN_AI\",\n", + " \"1_CAT_FUN_AF\",\n", + " \"1_CAT_MED\",\n", + " \"2_CAT_FUN_AI\",\n", + " \"2_CAT_FUN_AF\",\n", + " \"2_CAT_MED\",\n", + " \"3_CAT_FUN_AI\",\n", + " \"3_CAT_FUN_AF\",\n", + " \"3_CAT_MED\"]\n", + " )\n", + " header_map = {'NU_ANO_CENSO':'ano',\n", + " 'SG_UF':'UF',\n", + " 'CO_MUNICIPIO':'municipio_id',\n", + " 'NO_MUNICIPIO':'nome',\n", + " 'NO_CATEGORIA':'localização',\n", + " 'NO_DEPENDENCIA':'dependencia_administrativa',\n", + " '1_CAT_FUN_AI':'aprovacao_EF1',\n", + " '1_CAT_FUN_AF':'aprovacao_EF2',\n", + " '1_CAT_MED':'aprovacao_EM',\n", + " '2_CAT_FUN_AI':'reprovacao_EF1',\n", + " '2_CAT_FUN_AF':'reprovacao_EF2',\n", + " '2_CAT_MED':'reprovacao_EM',\n", + " '3_CAT_FUN_AI':'abandono_EF1',\n", + " '3_CAT_FUN_AF':'abandono_EF2',\n", + " '3_CAT_MED':'abandono_EM'\n", + " }\n", + " df_indic.rename(columns=header_map, inplace=True)\n", + " df_indic = df_indic[df_indic['UF'] == 'MG']\n", + " df_indic = df_indic[df_indic['localização'] == 'Total']\n", + " df_indic = df_indic.drop(columns=['localização'])\n", + " df_indic['municipio_id'] = df_indic['municipio_id'].astype(int)\n", + " df_long = pd.melt(\n", + " df_indic,\n", + " id_vars=['ano', 'UF', 'municipio_id', 'nome', 'dependencia_administrativa'],\n", + " value_vars=['aprovacao_EF1', 'aprovacao_EF2', 'aprovacao_EM',\n", + " 'reprovacao_EF1', 'reprovacao_EF2', 'reprovacao_EM',\n", + " 'abandono_EF1', 'abandono_EF2', 'abandono_EM'],\n", + " var_name='tipo_etapa',\n", + " value_name='valor'\n", + " )\n", + " df_long[['tipo', 'etapa_de_ensino']] = df_long['tipo_etapa'].str.split('_', expand=True)\n", + " df_long.drop('tipo_etapa', axis=1, inplace=True)\n", + " df_pivot = df_long.pivot_table(\n", + " index=['ano', 'UF', 'municipio_id', 'nome', 'dependencia_administrativa', 'etapa_de_ensino'],\n", + " columns='tipo',\n", + " values='valor',\n", + " aggfunc='first'\n", + " ).reset_index()\n", + " df_pivot.columns.name = None\n", + " df_pivot.rename(columns={'aprovacao': 'taxa_de_aprovacao', 'reprovacao': 'taxa_de_reprovacao', 'abandono': 'taxa_de_abandono', 'nome':'Município'}, inplace=True)\n", + " with pd.option_context('future.no_silent_downcasting', True):\n", + " df_pivot['taxa_de_aprovacao'] = df_pivot['taxa_de_aprovacao'].replace({'--': np.nan})\n", + " df_pivot['taxa_de_reprovacao'] = df_pivot['taxa_de_reprovacao'].replace({'--': np.nan})\n", + " df_pivot['taxa_de_abandono'] = df_pivot['taxa_de_abandono'].replace({'--': np.nan})\n", + "\n", + " df_pivot = df_pivot.where(pd.notnull(df_pivot), None) # substitui NaN por None\n", + " return df_pivot" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "def bulk_insert_data2(full_table_data: pd.DataFrame, current_file: str=None):\n", + " # Verifica o progresso do checkpoint\n", + " if current_file:\n", + " save_checkpoint(current_file)\n", + " filter_dict = get_existing_filters()\n", + " with Session(engine) as session:\n", + " indicador_objs = []\n", + "\n", + " # Processar cada linha do DataFrame\n", + " for _, row in full_table_data.iterrows():\n", + " # Obter ou criar o filtro e obter seu ID\n", + "\n", + " filter_key = (row['municipio_id'],\n", + " row['etapa_de_ensino'], row['ano'])\n", + "\n", + " if filter_key in filter_dict:\n", + " # Filtro já existe, usar o ID existente.\n", + " id_filter = filter_dict[filter_key]\n", + " else:\n", + " # Criar novo e adicionar no dicionario\n", + " filtro = Filtro(\n", + " municipio_id=row['municipio_id'], etapa_de_ensino=row['etapa_de_ensino'], ano=row['ano'])\n", + " session.add(filtro)\n", + " session.flush()\n", + " id_filter = filtro.id\n", + " filter_dict[filter_key] = id_filter\n", + "\n", + " indicador = Indicador(id_filtro=id_filter,\n", + " dependencia_administrativa=row['dependencia_administrativa'],\n", + " taxa_de_aprovacao=row['taxa_de_aprovacao'],\n", + " taxa_de_reprovacao=row['taxa_de_reprovacao'],\n", + " taxa_de_abandono=row['taxa_de_abandono'])\n", + " indicador_objs.append(indicador)\n", + " # Inserir em lote\n", + " session.bulk_save_objects(indicador_objs)\n", + " session.commit()\n", + " if current_file:\n", + " os.remove(CHECKPOINT_FILE)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [], + "source": [ + "#bulk_insert_data2(df_pivot)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def alternate_file_and_insert2(list_file_path: list):\n", + " checkpoint_file = load_checkpoint()\n", + " # garante que a partir de um certo index em all_category_objs, todos serao varridos\n", + " was_not_scanned = False\n", + " if not checkpoint_file:\n", + " was_not_scanned = True\n", + " for file_path in list_file_path:\n", + " if was_not_scanned:\n", + " df_full_table = make_full_table2(file_path)\n", + " display(df_full_table)\n", + " bulk_insert_data2(\n", + " df_full_table,\n", + " file_path)\n", + " elif checkpoint_file == file_path:\n", + " was_not_scanned = True" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception ignored in: \n", + "Traceback (most recent call last):\n", + " File \"/home/jorranico/miniconda3/envs/WebScrapper/lib/python3.12/zipfile/__init__.py\", line 1938, in __del__\n", + " def __del__(self):\n", + "\n", + "KeyboardInterrupt: \n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
anoUFmunicipio_idMunicípiodependencia_administrativaetapa_de_ensinotaxa_de_abandonotaxa_de_aprovacaotaxa_de_reprovacao
02022MG3100104Abadia dos DouradosEstadualEF1NoneNoneNone
12022MG3100104Abadia dos DouradosEstadualEF20.793.26.1
22022MG3100104Abadia dos DouradosEstadualEM291.66.4
32022MG3100104Abadia dos DouradosMunicipalEF101000
42022MG3100104Abadia dos DouradosMunicipalEF2NoneNoneNone
..............................
113082022MG3172202Wenceslau BrazPúblicaEF2096.83.2
113092022MG3172202Wenceslau BrazPúblicaEM097.82.2
113102022MG3172202Wenceslau BrazTotalEF101000
113112022MG3172202Wenceslau BrazTotalEF2096.83.2
113122022MG3172202Wenceslau BrazTotalEM097.82.2
\n", + "

11313 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " ano UF municipio_id Município dependencia_administrativa \\\n", + "0 2022 MG 3100104 Abadia dos Dourados Estadual \n", + "1 2022 MG 3100104 Abadia dos Dourados Estadual \n", + "2 2022 MG 3100104 Abadia dos Dourados Estadual \n", + "3 2022 MG 3100104 Abadia dos Dourados Municipal \n", + "4 2022 MG 3100104 Abadia dos Dourados Municipal \n", + "... ... .. ... ... ... \n", + "11308 2022 MG 3172202 Wenceslau Braz Pública \n", + "11309 2022 MG 3172202 Wenceslau Braz Pública \n", + "11310 2022 MG 3172202 Wenceslau Braz Total \n", + "11311 2022 MG 3172202 Wenceslau Braz Total \n", + "11312 2022 MG 3172202 Wenceslau Braz Total \n", + "\n", + " etapa_de_ensino taxa_de_abandono taxa_de_aprovacao taxa_de_reprovacao \n", + "0 EF1 None None None \n", + "1 EF2 0.7 93.2 6.1 \n", + "2 EM 2 91.6 6.4 \n", + "3 EF1 0 100 0 \n", + "4 EF2 None None None \n", + "... ... ... ... ... \n", + "11308 EF2 0 96.8 3.2 \n", + "11309 EM 0 97.8 2.2 \n", + "11310 EF1 0 100 0 \n", + "11311 EF2 0 96.8 3.2 \n", + "11312 EM 0 97.8 2.2 \n", + "\n", + "[11313 rows x 9 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-28 00:48:05,642 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:48:05,643 INFO sqlalchemy.engine.Engine SELECT \"Filtro\".id AS \"Filtro_id\", \"Filtro\".municipio_id AS \"Filtro_municipio_id\", \"Filtro\".etapa_de_ensino AS \"Filtro_etapa_de_ensino\", \"Filtro\".ano AS \"Filtro_ano\" \n", + "FROM \"Filtro\"\n", + "2024-08-28 00:48:05,644 INFO sqlalchemy.engine.Engine [cached since 1710s ago] {}\n", + "2024-08-28 00:48:05,944 INFO sqlalchemy.engine.Engine ROLLBACK\n", + "2024-08-28 00:48:06,096 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:48:06,099 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:06,104 INFO sqlalchemy.engine.Engine [cached since 1562s ago] {'municipio_id': 3100104, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:06,406 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:06,410 INFO sqlalchemy.engine.Engine [cached since 1562s ago] {'municipio_id': 3100104, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:06,562 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:06,568 INFO sqlalchemy.engine.Engine [cached since 1562s ago] {'municipio_id': 3100104, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:06,725 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:06,727 INFO sqlalchemy.engine.Engine [cached since 1562s ago] {'municipio_id': 3100203, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:06,883 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:06,885 INFO sqlalchemy.engine.Engine [cached since 1562s ago] {'municipio_id': 3100203, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:07,037 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:07,038 INFO sqlalchemy.engine.Engine [cached since 1563s ago] {'municipio_id': 3100203, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:07,190 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:07,191 INFO sqlalchemy.engine.Engine [cached since 1563s ago] {'municipio_id': 3100302, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:07,341 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:07,342 INFO sqlalchemy.engine.Engine [cached since 1563s ago] {'municipio_id': 3100302, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:07,491 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:07,492 INFO sqlalchemy.engine.Engine [cached since 1563s ago] {'municipio_id': 3100302, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:07,648 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:07,649 INFO sqlalchemy.engine.Engine [cached since 1563s ago] {'municipio_id': 3100401, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:07,800 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:07,803 INFO sqlalchemy.engine.Engine [cached since 1563s ago] {'municipio_id': 3100401, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:07,955 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:07,956 INFO sqlalchemy.engine.Engine [cached since 1563s ago] {'municipio_id': 3100401, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:08,107 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:08,108 INFO sqlalchemy.engine.Engine [cached since 1564s ago] {'municipio_id': 3100500, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:08,258 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:08,259 INFO sqlalchemy.engine.Engine [cached since 1564s ago] {'municipio_id': 3100500, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:08,410 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:08,411 INFO sqlalchemy.engine.Engine [cached since 1564s ago] {'municipio_id': 3100500, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:08,562 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:08,563 INFO sqlalchemy.engine.Engine [cached since 1564s ago] {'municipio_id': 3100609, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:08,713 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:08,714 INFO sqlalchemy.engine.Engine [cached since 1564s ago] {'municipio_id': 3100609, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:08,866 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:08,868 INFO sqlalchemy.engine.Engine [cached since 1564s ago] {'municipio_id': 3100609, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:09,021 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:09,023 INFO sqlalchemy.engine.Engine [cached since 1565s ago] {'municipio_id': 3100708, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:09,172 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:09,173 INFO sqlalchemy.engine.Engine [cached since 1565s ago] {'municipio_id': 3100708, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:09,324 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:09,325 INFO sqlalchemy.engine.Engine [cached since 1565s ago] {'municipio_id': 3100708, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:09,477 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:09,477 INFO sqlalchemy.engine.Engine [cached since 1565s ago] {'municipio_id': 3100807, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:09,628 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:09,629 INFO sqlalchemy.engine.Engine [cached since 1565s ago] {'municipio_id': 3100807, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:09,783 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:09,785 INFO sqlalchemy.engine.Engine [cached since 1565s ago] {'municipio_id': 3100807, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:09,937 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:09,939 INFO sqlalchemy.engine.Engine [cached since 1565s ago] {'municipio_id': 3100906, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:10,088 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:10,089 INFO sqlalchemy.engine.Engine [cached since 1566s ago] {'municipio_id': 3100906, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:10,245 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:10,246 INFO sqlalchemy.engine.Engine [cached since 1566s ago] {'municipio_id': 3100906, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:10,396 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:10,397 INFO sqlalchemy.engine.Engine [cached since 1566s ago] {'municipio_id': 3101003, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:10,547 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:10,548 INFO sqlalchemy.engine.Engine [cached since 1566s ago] {'municipio_id': 3101003, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:10,698 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:10,701 INFO sqlalchemy.engine.Engine [cached since 1566s ago] {'municipio_id': 3101003, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:10,862 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:10,863 INFO sqlalchemy.engine.Engine [cached since 1566s ago] {'municipio_id': 3101102, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:11,019 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:11,020 INFO sqlalchemy.engine.Engine [cached since 1567s ago] {'municipio_id': 3101102, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:11,171 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:11,175 INFO sqlalchemy.engine.Engine [cached since 1567s ago] {'municipio_id': 3101102, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:11,330 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:11,331 INFO sqlalchemy.engine.Engine [cached since 1567s ago] {'municipio_id': 3101201, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:11,481 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:11,482 INFO sqlalchemy.engine.Engine [cached since 1567s ago] {'municipio_id': 3101201, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:11,641 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:11,642 INFO sqlalchemy.engine.Engine [cached since 1567s ago] {'municipio_id': 3101201, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:11,795 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:11,797 INFO sqlalchemy.engine.Engine [cached since 1567s ago] {'municipio_id': 3101300, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:11,947 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:11,947 INFO sqlalchemy.engine.Engine [cached since 1567s ago] {'municipio_id': 3101300, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:12,096 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:12,097 INFO sqlalchemy.engine.Engine [cached since 1568s ago] {'municipio_id': 3101300, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:12,250 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:12,253 INFO sqlalchemy.engine.Engine [cached since 1568s ago] {'municipio_id': 3101409, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:12,408 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:12,410 INFO sqlalchemy.engine.Engine [cached since 1568s ago] {'municipio_id': 3101409, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:12,563 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:12,563 INFO sqlalchemy.engine.Engine [cached since 1568s ago] {'municipio_id': 3101409, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:12,715 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:12,716 INFO sqlalchemy.engine.Engine [cached since 1568s ago] {'municipio_id': 3101508, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:12,869 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:12,872 INFO sqlalchemy.engine.Engine [cached since 1568s ago] {'municipio_id': 3101508, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:13,022 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:13,024 INFO sqlalchemy.engine.Engine [cached since 1569s ago] {'municipio_id': 3101508, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:13,176 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:13,177 INFO sqlalchemy.engine.Engine [cached since 1569s ago] {'municipio_id': 3101607, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:13,328 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:13,329 INFO sqlalchemy.engine.Engine [cached since 1569s ago] {'municipio_id': 3101607, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:13,479 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:13,480 INFO sqlalchemy.engine.Engine [cached since 1569s ago] {'municipio_id': 3101607, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:13,643 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:13,644 INFO sqlalchemy.engine.Engine [cached since 1569s ago] {'municipio_id': 3101631, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:13,793 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:13,794 INFO sqlalchemy.engine.Engine [cached since 1569s ago] {'municipio_id': 3101631, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:13,955 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:13,957 INFO sqlalchemy.engine.Engine [cached since 1569s ago] {'municipio_id': 3101631, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:14,110 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:14,111 INFO sqlalchemy.engine.Engine [cached since 1570s ago] {'municipio_id': 3101706, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:14,261 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:14,263 INFO sqlalchemy.engine.Engine [cached since 1570s ago] {'municipio_id': 3101706, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:14,417 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:14,421 INFO sqlalchemy.engine.Engine [cached since 1570s ago] {'municipio_id': 3101706, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:14,577 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:14,577 INFO sqlalchemy.engine.Engine [cached since 1570s ago] {'municipio_id': 3101805, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:14,725 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:14,726 INFO sqlalchemy.engine.Engine [cached since 1570s ago] {'municipio_id': 3101805, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:14,875 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:14,876 INFO sqlalchemy.engine.Engine [cached since 1570s ago] {'municipio_id': 3101805, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:15,037 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:15,049 INFO sqlalchemy.engine.Engine [cached since 1571s ago] {'municipio_id': 3101904, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:15,207 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:15,214 INFO sqlalchemy.engine.Engine [cached since 1571s ago] {'municipio_id': 3101904, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:15,365 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:15,365 INFO sqlalchemy.engine.Engine [cached since 1571s ago] {'municipio_id': 3101904, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:15,515 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:15,516 INFO sqlalchemy.engine.Engine [cached since 1571s ago] {'municipio_id': 3102001, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:15,664 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:15,665 INFO sqlalchemy.engine.Engine [cached since 1571s ago] {'municipio_id': 3102001, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:15,814 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:15,814 INFO sqlalchemy.engine.Engine [cached since 1571s ago] {'municipio_id': 3102001, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:15,965 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:15,966 INFO sqlalchemy.engine.Engine [cached since 1571s ago] {'municipio_id': 3102050, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:16,121 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:16,122 INFO sqlalchemy.engine.Engine [cached since 1572s ago] {'municipio_id': 3102050, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:16,272 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:16,274 INFO sqlalchemy.engine.Engine [cached since 1572s ago] {'municipio_id': 3102050, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:16,426 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:16,426 INFO sqlalchemy.engine.Engine [cached since 1572s ago] {'municipio_id': 3102100, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:16,578 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:16,579 INFO sqlalchemy.engine.Engine [cached since 1572s ago] {'municipio_id': 3102100, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:16,730 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:16,731 INFO sqlalchemy.engine.Engine [cached since 1572s ago] {'municipio_id': 3102100, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:16,883 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:16,884 INFO sqlalchemy.engine.Engine [cached since 1572s ago] {'municipio_id': 3102209, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:17,036 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:17,037 INFO sqlalchemy.engine.Engine [cached since 1573s ago] {'municipio_id': 3102209, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:17,189 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:17,194 INFO sqlalchemy.engine.Engine [cached since 1573s ago] {'municipio_id': 3102209, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:17,356 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:17,360 INFO sqlalchemy.engine.Engine [cached since 1573s ago] {'municipio_id': 3102308, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:17,514 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:17,515 INFO sqlalchemy.engine.Engine [cached since 1573s ago] {'municipio_id': 3102308, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:17,664 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:17,665 INFO sqlalchemy.engine.Engine [cached since 1573s ago] {'municipio_id': 3102308, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:17,814 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:17,815 INFO sqlalchemy.engine.Engine [cached since 1573s ago] {'municipio_id': 3102407, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:17,964 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:17,964 INFO sqlalchemy.engine.Engine [cached since 1573s ago] {'municipio_id': 3102407, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:18,114 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:18,114 INFO sqlalchemy.engine.Engine [cached since 1574s ago] {'municipio_id': 3102407, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:18,265 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:18,265 INFO sqlalchemy.engine.Engine [cached since 1574s ago] {'municipio_id': 3102506, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:18,415 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:18,416 INFO sqlalchemy.engine.Engine [cached since 1574s ago] {'municipio_id': 3102506, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:18,564 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:18,565 INFO sqlalchemy.engine.Engine [cached since 1574s ago] {'municipio_id': 3102506, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:18,716 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:18,717 INFO sqlalchemy.engine.Engine [cached since 1574s ago] {'municipio_id': 3102605, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:18,865 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:18,866 INFO sqlalchemy.engine.Engine [cached since 1574s ago] {'municipio_id': 3102605, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:19,015 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:19,016 INFO sqlalchemy.engine.Engine [cached since 1575s ago] {'municipio_id': 3102605, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:19,178 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:19,179 INFO sqlalchemy.engine.Engine [cached since 1575s ago] {'municipio_id': 3102704, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:19,327 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:19,328 INFO sqlalchemy.engine.Engine [cached since 1575s ago] {'municipio_id': 3102704, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:19,478 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:19,479 INFO sqlalchemy.engine.Engine [cached since 1575s ago] {'municipio_id': 3102704, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:19,630 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:19,631 INFO sqlalchemy.engine.Engine [cached since 1575s ago] {'municipio_id': 3102803, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:19,781 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:19,782 INFO sqlalchemy.engine.Engine [cached since 1575s ago] {'municipio_id': 3102803, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:19,933 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:19,934 INFO sqlalchemy.engine.Engine [cached since 1575s ago] {'municipio_id': 3102803, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:20,086 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:20,088 INFO sqlalchemy.engine.Engine [cached since 1576s ago] {'municipio_id': 3102852, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:20,240 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:20,242 INFO sqlalchemy.engine.Engine [cached since 1576s ago] {'municipio_id': 3102852, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:20,392 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:20,393 INFO sqlalchemy.engine.Engine [cached since 1576s ago] {'municipio_id': 3102852, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:20,545 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:20,546 INFO sqlalchemy.engine.Engine [cached since 1576s ago] {'municipio_id': 3102902, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:20,696 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:20,697 INFO sqlalchemy.engine.Engine [cached since 1576s ago] {'municipio_id': 3102902, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:20,849 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:20,849 INFO sqlalchemy.engine.Engine [cached since 1576s ago] {'municipio_id': 3102902, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:21,001 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:21,002 INFO sqlalchemy.engine.Engine [cached since 1577s ago] {'municipio_id': 3103009, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:21,152 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:21,154 INFO sqlalchemy.engine.Engine [cached since 1577s ago] {'municipio_id': 3103009, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:21,308 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:21,310 INFO sqlalchemy.engine.Engine [cached since 1577s ago] {'municipio_id': 3103009, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:21,463 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:21,464 INFO sqlalchemy.engine.Engine [cached since 1577s ago] {'municipio_id': 3103108, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:21,615 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:21,615 INFO sqlalchemy.engine.Engine [cached since 1577s ago] {'municipio_id': 3103108, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:21,767 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:21,768 INFO sqlalchemy.engine.Engine [cached since 1577s ago] {'municipio_id': 3103108, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:21,946 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:21,947 INFO sqlalchemy.engine.Engine [cached since 1577s ago] {'municipio_id': 3103207, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:22,096 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:22,097 INFO sqlalchemy.engine.Engine [cached since 1578s ago] {'municipio_id': 3103207, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:22,248 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:22,248 INFO sqlalchemy.engine.Engine [cached since 1578s ago] {'municipio_id': 3103207, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:22,400 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:22,401 INFO sqlalchemy.engine.Engine [cached since 1578s ago] {'municipio_id': 3103306, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:22,552 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:22,553 INFO sqlalchemy.engine.Engine [cached since 1578s ago] {'municipio_id': 3103306, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:22,706 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:22,708 INFO sqlalchemy.engine.Engine [cached since 1578s ago] {'municipio_id': 3103306, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:22,861 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:22,862 INFO sqlalchemy.engine.Engine [cached since 1578s ago] {'municipio_id': 3103405, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:23,011 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:23,012 INFO sqlalchemy.engine.Engine [cached since 1579s ago] {'municipio_id': 3103405, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:23,161 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:23,162 INFO sqlalchemy.engine.Engine [cached since 1579s ago] {'municipio_id': 3103405, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:23,315 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:23,316 INFO sqlalchemy.engine.Engine [cached since 1579s ago] {'municipio_id': 3103504, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:23,468 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:23,468 INFO sqlalchemy.engine.Engine [cached since 1579s ago] {'municipio_id': 3103504, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:23,650 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:23,651 INFO sqlalchemy.engine.Engine [cached since 1579s ago] {'municipio_id': 3103504, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:23,801 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:23,802 INFO sqlalchemy.engine.Engine [cached since 1579s ago] {'municipio_id': 3103603, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:23,951 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:23,952 INFO sqlalchemy.engine.Engine [cached since 1579s ago] {'municipio_id': 3103603, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:24,101 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:24,102 INFO sqlalchemy.engine.Engine [cached since 1580s ago] {'municipio_id': 3103603, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:24,252 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:24,252 INFO sqlalchemy.engine.Engine [cached since 1580s ago] {'municipio_id': 3103702, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:24,402 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:24,403 INFO sqlalchemy.engine.Engine [cached since 1580s ago] {'municipio_id': 3103702, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:24,554 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:24,555 INFO sqlalchemy.engine.Engine [cached since 1580s ago] {'municipio_id': 3103702, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:24,712 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:24,713 INFO sqlalchemy.engine.Engine [cached since 1580s ago] {'municipio_id': 3103751, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:24,865 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:24,866 INFO sqlalchemy.engine.Engine [cached since 1580s ago] {'municipio_id': 3103751, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:25,014 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:25,015 INFO sqlalchemy.engine.Engine [cached since 1581s ago] {'municipio_id': 3103751, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:25,165 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:25,166 INFO sqlalchemy.engine.Engine [cached since 1581s ago] {'municipio_id': 3103801, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:25,315 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:25,315 INFO sqlalchemy.engine.Engine [cached since 1581s ago] {'municipio_id': 3103801, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:25,464 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:25,465 INFO sqlalchemy.engine.Engine [cached since 1581s ago] {'municipio_id': 3103801, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:25,615 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:25,616 INFO sqlalchemy.engine.Engine [cached since 1581s ago] {'municipio_id': 3103900, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:25,765 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:25,766 INFO sqlalchemy.engine.Engine [cached since 1581s ago] {'municipio_id': 3103900, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:25,916 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:25,918 INFO sqlalchemy.engine.Engine [cached since 1581s ago] {'municipio_id': 3103900, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:26,070 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:26,071 INFO sqlalchemy.engine.Engine [cached since 1582s ago] {'municipio_id': 3104007, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:26,224 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:26,226 INFO sqlalchemy.engine.Engine [cached since 1582s ago] {'municipio_id': 3104007, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:26,376 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:26,377 INFO sqlalchemy.engine.Engine [cached since 1582s ago] {'municipio_id': 3104007, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:26,533 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:26,534 INFO sqlalchemy.engine.Engine [cached since 1582s ago] {'municipio_id': 3104106, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:26,685 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:26,686 INFO sqlalchemy.engine.Engine [cached since 1582s ago] {'municipio_id': 3104106, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:26,837 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:26,838 INFO sqlalchemy.engine.Engine [cached since 1582s ago] {'municipio_id': 3104106, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:26,991 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:26,992 INFO sqlalchemy.engine.Engine [cached since 1583s ago] {'municipio_id': 3104205, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:27,145 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:27,146 INFO sqlalchemy.engine.Engine [cached since 1583s ago] {'municipio_id': 3104205, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:27,296 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:27,297 INFO sqlalchemy.engine.Engine [cached since 1583s ago] {'municipio_id': 3104205, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:27,449 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:27,449 INFO sqlalchemy.engine.Engine [cached since 1583s ago] {'municipio_id': 3104304, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:27,600 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:27,600 INFO sqlalchemy.engine.Engine [cached since 1583s ago] {'municipio_id': 3104304, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:27,751 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:27,752 INFO sqlalchemy.engine.Engine [cached since 1583s ago] {'municipio_id': 3104304, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:27,905 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:27,906 INFO sqlalchemy.engine.Engine [cached since 1583s ago] {'municipio_id': 3104403, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:28,059 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:28,060 INFO sqlalchemy.engine.Engine [cached since 1584s ago] {'municipio_id': 3104403, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:28,210 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:28,211 INFO sqlalchemy.engine.Engine [cached since 1584s ago] {'municipio_id': 3104403, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:28,363 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:28,364 INFO sqlalchemy.engine.Engine [cached since 1584s ago] {'municipio_id': 3104452, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:28,515 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:28,516 INFO sqlalchemy.engine.Engine [cached since 1584s ago] {'municipio_id': 3104452, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:28,665 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:28,666 INFO sqlalchemy.engine.Engine [cached since 1584s ago] {'municipio_id': 3104452, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:28,815 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:28,816 INFO sqlalchemy.engine.Engine [cached since 1584s ago] {'municipio_id': 3104502, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:28,965 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:28,966 INFO sqlalchemy.engine.Engine [cached since 1584s ago] {'municipio_id': 3104502, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:29,116 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:29,117 INFO sqlalchemy.engine.Engine [cached since 1585s ago] {'municipio_id': 3104502, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:29,270 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:29,270 INFO sqlalchemy.engine.Engine [cached since 1585s ago] {'municipio_id': 3104601, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:29,419 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:29,420 INFO sqlalchemy.engine.Engine [cached since 1585s ago] {'municipio_id': 3104601, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:29,584 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:29,584 INFO sqlalchemy.engine.Engine [cached since 1585s ago] {'municipio_id': 3104601, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:29,735 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:29,736 INFO sqlalchemy.engine.Engine [cached since 1585s ago] {'municipio_id': 3104700, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:29,894 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:29,895 INFO sqlalchemy.engine.Engine [cached since 1585s ago] {'municipio_id': 3104700, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:30,045 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:30,052 INFO sqlalchemy.engine.Engine [cached since 1586s ago] {'municipio_id': 3104700, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:30,202 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:30,203 INFO sqlalchemy.engine.Engine [cached since 1586s ago] {'municipio_id': 3104809, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:30,351 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:30,352 INFO sqlalchemy.engine.Engine [cached since 1586s ago] {'municipio_id': 3104809, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:30,503 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:30,504 INFO sqlalchemy.engine.Engine [cached since 1586s ago] {'municipio_id': 3104809, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:30,656 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:30,657 INFO sqlalchemy.engine.Engine [cached since 1586s ago] {'municipio_id': 3104908, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:30,806 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:30,807 INFO sqlalchemy.engine.Engine [cached since 1586s ago] {'municipio_id': 3104908, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:30,955 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:30,957 INFO sqlalchemy.engine.Engine [cached since 1586s ago] {'municipio_id': 3104908, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:31,110 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:31,112 INFO sqlalchemy.engine.Engine [cached since 1587s ago] {'municipio_id': 3105004, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:31,265 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:31,266 INFO sqlalchemy.engine.Engine [cached since 1587s ago] {'municipio_id': 3105004, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:31,417 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:31,419 INFO sqlalchemy.engine.Engine [cached since 1587s ago] {'municipio_id': 3105004, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:31,571 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:31,572 INFO sqlalchemy.engine.Engine [cached since 1587s ago] {'municipio_id': 3105103, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:31,722 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:31,723 INFO sqlalchemy.engine.Engine [cached since 1587s ago] {'municipio_id': 3105103, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:31,875 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:31,877 INFO sqlalchemy.engine.Engine [cached since 1587s ago] {'municipio_id': 3105103, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:32,032 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:32,033 INFO sqlalchemy.engine.Engine [cached since 1588s ago] {'municipio_id': 3105202, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:32,182 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:32,183 INFO sqlalchemy.engine.Engine [cached since 1588s ago] {'municipio_id': 3105202, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:32,334 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:32,335 INFO sqlalchemy.engine.Engine [cached since 1588s ago] {'municipio_id': 3105202, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:32,488 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:32,489 INFO sqlalchemy.engine.Engine [cached since 1588s ago] {'municipio_id': 3105301, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:32,640 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:32,641 INFO sqlalchemy.engine.Engine [cached since 1588s ago] {'municipio_id': 3105301, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:32,790 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:32,791 INFO sqlalchemy.engine.Engine [cached since 1588s ago] {'municipio_id': 3105301, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:32,942 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:32,946 INFO sqlalchemy.engine.Engine [cached since 1588s ago] {'municipio_id': 3105400, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:33,097 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:33,101 INFO sqlalchemy.engine.Engine [cached since 1589s ago] {'municipio_id': 3105400, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:33,253 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:33,253 INFO sqlalchemy.engine.Engine [cached since 1589s ago] {'municipio_id': 3105400, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:33,405 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:33,406 INFO sqlalchemy.engine.Engine [cached since 1589s ago] {'municipio_id': 3105509, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:33,556 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:33,557 INFO sqlalchemy.engine.Engine [cached since 1589s ago] {'municipio_id': 3105509, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:33,708 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:33,709 INFO sqlalchemy.engine.Engine [cached since 1589s ago] {'municipio_id': 3105509, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:33,867 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:33,868 INFO sqlalchemy.engine.Engine [cached since 1589s ago] {'municipio_id': 3105608, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:34,019 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:34,019 INFO sqlalchemy.engine.Engine [cached since 1590s ago] {'municipio_id': 3105608, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:34,168 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:34,169 INFO sqlalchemy.engine.Engine [cached since 1590s ago] {'municipio_id': 3105608, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:34,322 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:34,323 INFO sqlalchemy.engine.Engine [cached since 1590s ago] {'municipio_id': 3105707, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:34,472 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:34,474 INFO sqlalchemy.engine.Engine [cached since 1590s ago] {'municipio_id': 3105707, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:34,624 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:34,625 INFO sqlalchemy.engine.Engine [cached since 1590s ago] {'municipio_id': 3105707, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:34,778 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:34,780 INFO sqlalchemy.engine.Engine [cached since 1590s ago] {'municipio_id': 3105905, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:34,932 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:34,933 INFO sqlalchemy.engine.Engine [cached since 1590s ago] {'municipio_id': 3105905, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:35,084 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:35,084 INFO sqlalchemy.engine.Engine [cached since 1591s ago] {'municipio_id': 3105905, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:35,238 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:35,238 INFO sqlalchemy.engine.Engine [cached since 1591s ago] {'municipio_id': 3106002, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:35,390 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:35,391 INFO sqlalchemy.engine.Engine [cached since 1591s ago] {'municipio_id': 3106002, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:35,550 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:35,562 INFO sqlalchemy.engine.Engine [cached since 1591s ago] {'municipio_id': 3106002, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:35,732 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:35,737 INFO sqlalchemy.engine.Engine [cached since 1591s ago] {'municipio_id': 3106101, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:35,887 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:35,888 INFO sqlalchemy.engine.Engine [cached since 1591s ago] {'municipio_id': 3106101, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:36,037 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:36,038 INFO sqlalchemy.engine.Engine [cached since 1592s ago] {'municipio_id': 3106101, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:36,188 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:36,189 INFO sqlalchemy.engine.Engine [cached since 1592s ago] {'municipio_id': 3106200, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:36,337 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:36,338 INFO sqlalchemy.engine.Engine [cached since 1592s ago] {'municipio_id': 3106200, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:36,513 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:36,515 INFO sqlalchemy.engine.Engine [cached since 1592s ago] {'municipio_id': 3106200, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:36,672 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:36,674 INFO sqlalchemy.engine.Engine [cached since 1592s ago] {'municipio_id': 3106309, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:36,824 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:36,825 INFO sqlalchemy.engine.Engine [cached since 1592s ago] {'municipio_id': 3106309, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:36,974 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:36,975 INFO sqlalchemy.engine.Engine [cached since 1593s ago] {'municipio_id': 3106309, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:37,125 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:37,126 INFO sqlalchemy.engine.Engine [cached since 1593s ago] {'municipio_id': 3106408, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:37,276 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:37,277 INFO sqlalchemy.engine.Engine [cached since 1593s ago] {'municipio_id': 3106408, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:37,433 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:37,436 INFO sqlalchemy.engine.Engine [cached since 1593s ago] {'municipio_id': 3106408, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:37,588 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:37,590 INFO sqlalchemy.engine.Engine [cached since 1593s ago] {'municipio_id': 3106507, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:37,741 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:37,743 INFO sqlalchemy.engine.Engine [cached since 1593s ago] {'municipio_id': 3106507, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:37,892 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:37,893 INFO sqlalchemy.engine.Engine [cached since 1593s ago] {'municipio_id': 3106507, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:38,045 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:38,049 INFO sqlalchemy.engine.Engine [cached since 1594s ago] {'municipio_id': 3106606, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:38,201 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:38,202 INFO sqlalchemy.engine.Engine [cached since 1594s ago] {'municipio_id': 3106606, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:38,354 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:38,355 INFO sqlalchemy.engine.Engine [cached since 1594s ago] {'municipio_id': 3106606, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:38,506 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:38,507 INFO sqlalchemy.engine.Engine [cached since 1594s ago] {'municipio_id': 3106655, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:38,658 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:38,660 INFO sqlalchemy.engine.Engine [cached since 1594s ago] {'municipio_id': 3106655, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:38,810 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:38,811 INFO sqlalchemy.engine.Engine [cached since 1594s ago] {'municipio_id': 3106655, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:38,963 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:38,967 INFO sqlalchemy.engine.Engine [cached since 1594s ago] {'municipio_id': 3106705, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:39,118 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:39,119 INFO sqlalchemy.engine.Engine [cached since 1595s ago] {'municipio_id': 3106705, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:39,268 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:39,269 INFO sqlalchemy.engine.Engine [cached since 1595s ago] {'municipio_id': 3106705, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:39,419 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:39,420 INFO sqlalchemy.engine.Engine [cached since 1595s ago] {'municipio_id': 3106804, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:39,570 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:39,571 INFO sqlalchemy.engine.Engine [cached since 1595s ago] {'municipio_id': 3106804, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:39,722 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:39,723 INFO sqlalchemy.engine.Engine [cached since 1595s ago] {'municipio_id': 3106804, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:39,874 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:39,875 INFO sqlalchemy.engine.Engine [cached since 1595s ago] {'municipio_id': 3106903, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:40,025 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:40,025 INFO sqlalchemy.engine.Engine [cached since 1596s ago] {'municipio_id': 3106903, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:40,174 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:40,175 INFO sqlalchemy.engine.Engine [cached since 1596s ago] {'municipio_id': 3106903, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:40,326 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:40,327 INFO sqlalchemy.engine.Engine [cached since 1596s ago] {'municipio_id': 3107000, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:40,475 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:40,476 INFO sqlalchemy.engine.Engine [cached since 1596s ago] {'municipio_id': 3107000, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:40,627 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:40,628 INFO sqlalchemy.engine.Engine [cached since 1596s ago] {'municipio_id': 3107000, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:40,782 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:40,784 INFO sqlalchemy.engine.Engine [cached since 1596s ago] {'municipio_id': 3107109, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:40,934 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:40,934 INFO sqlalchemy.engine.Engine [cached since 1596s ago] {'municipio_id': 3107109, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:41,086 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:41,087 INFO sqlalchemy.engine.Engine [cached since 1597s ago] {'municipio_id': 3107109, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:41,239 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:41,240 INFO sqlalchemy.engine.Engine [cached since 1597s ago] {'municipio_id': 3107208, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:41,388 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:41,389 INFO sqlalchemy.engine.Engine [cached since 1597s ago] {'municipio_id': 3107208, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:41,539 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:41,540 INFO sqlalchemy.engine.Engine [cached since 1597s ago] {'municipio_id': 3107208, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:41,692 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:41,693 INFO sqlalchemy.engine.Engine [cached since 1597s ago] {'municipio_id': 3107307, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:41,844 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:41,845 INFO sqlalchemy.engine.Engine [cached since 1597s ago] {'municipio_id': 3107307, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:41,995 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:41,998 INFO sqlalchemy.engine.Engine [cached since 1598s ago] {'municipio_id': 3107307, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:42,154 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:42,155 INFO sqlalchemy.engine.Engine [cached since 1598s ago] {'municipio_id': 3107406, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:42,307 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:42,307 INFO sqlalchemy.engine.Engine [cached since 1598s ago] {'municipio_id': 3107406, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:42,457 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:42,458 INFO sqlalchemy.engine.Engine [cached since 1598s ago] {'municipio_id': 3107406, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:42,609 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:42,610 INFO sqlalchemy.engine.Engine [cached since 1598s ago] {'municipio_id': 3107505, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:42,761 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:42,762 INFO sqlalchemy.engine.Engine [cached since 1598s ago] {'municipio_id': 3107505, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:42,910 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:42,912 INFO sqlalchemy.engine.Engine [cached since 1598s ago] {'municipio_id': 3107505, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:43,063 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:43,063 INFO sqlalchemy.engine.Engine [cached since 1599s ago] {'municipio_id': 3107604, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:43,218 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:43,221 INFO sqlalchemy.engine.Engine [cached since 1599s ago] {'municipio_id': 3107604, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:43,371 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:43,372 INFO sqlalchemy.engine.Engine [cached since 1599s ago] {'municipio_id': 3107604, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:43,524 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:43,525 INFO sqlalchemy.engine.Engine [cached since 1599s ago] {'municipio_id': 3107703, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:43,676 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:43,678 INFO sqlalchemy.engine.Engine [cached since 1599s ago] {'municipio_id': 3107703, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:43,830 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:43,830 INFO sqlalchemy.engine.Engine [cached since 1599s ago] {'municipio_id': 3107703, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:43,985 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:43,987 INFO sqlalchemy.engine.Engine [cached since 1600s ago] {'municipio_id': 3107802, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:44,171 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:44,172 INFO sqlalchemy.engine.Engine [cached since 1600s ago] {'municipio_id': 3107802, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:44,321 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:44,322 INFO sqlalchemy.engine.Engine [cached since 1600s ago] {'municipio_id': 3107802, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:44,477 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:44,478 INFO sqlalchemy.engine.Engine [cached since 1600s ago] {'municipio_id': 3107901, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:44,630 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:44,631 INFO sqlalchemy.engine.Engine [cached since 1600s ago] {'municipio_id': 3107901, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:44,785 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:44,786 INFO sqlalchemy.engine.Engine [cached since 1600s ago] {'municipio_id': 3107901, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:44,940 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:44,941 INFO sqlalchemy.engine.Engine [cached since 1600s ago] {'municipio_id': 3108008, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:45,093 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:45,094 INFO sqlalchemy.engine.Engine [cached since 1601s ago] {'municipio_id': 3108008, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:45,243 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:45,245 INFO sqlalchemy.engine.Engine [cached since 1601s ago] {'municipio_id': 3108008, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:45,396 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:45,397 INFO sqlalchemy.engine.Engine [cached since 1601s ago] {'municipio_id': 3108107, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:45,548 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:45,551 INFO sqlalchemy.engine.Engine [cached since 1601s ago] {'municipio_id': 3108107, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:45,701 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:45,703 INFO sqlalchemy.engine.Engine [cached since 1601s ago] {'municipio_id': 3108107, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:45,854 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:45,855 INFO sqlalchemy.engine.Engine [cached since 1601s ago] {'municipio_id': 3108206, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:46,005 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:46,007 INFO sqlalchemy.engine.Engine [cached since 1602s ago] {'municipio_id': 3108206, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:46,156 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:46,157 INFO sqlalchemy.engine.Engine [cached since 1602s ago] {'municipio_id': 3108206, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:46,307 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:46,307 INFO sqlalchemy.engine.Engine [cached since 1602s ago] {'municipio_id': 3108255, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:46,458 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:46,458 INFO sqlalchemy.engine.Engine [cached since 1602s ago] {'municipio_id': 3108255, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:46,608 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:46,609 INFO sqlalchemy.engine.Engine [cached since 1602s ago] {'municipio_id': 3108255, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:46,760 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:46,761 INFO sqlalchemy.engine.Engine [cached since 1602s ago] {'municipio_id': 3108305, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:46,911 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:46,912 INFO sqlalchemy.engine.Engine [cached since 1602s ago] {'municipio_id': 3108305, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:47,062 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:47,063 INFO sqlalchemy.engine.Engine [cached since 1603s ago] {'municipio_id': 3108305, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:47,219 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:47,221 INFO sqlalchemy.engine.Engine [cached since 1603s ago] {'municipio_id': 3108404, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:47,373 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:47,373 INFO sqlalchemy.engine.Engine [cached since 1603s ago] {'municipio_id': 3108404, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:47,524 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:47,525 INFO sqlalchemy.engine.Engine [cached since 1603s ago] {'municipio_id': 3108404, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:47,677 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:47,678 INFO sqlalchemy.engine.Engine [cached since 1603s ago] {'municipio_id': 3108503, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:47,827 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:47,828 INFO sqlalchemy.engine.Engine [cached since 1603s ago] {'municipio_id': 3108503, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:47,979 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:47,979 INFO sqlalchemy.engine.Engine [cached since 1604s ago] {'municipio_id': 3108503, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:48,129 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:48,130 INFO sqlalchemy.engine.Engine [cached since 1604s ago] {'municipio_id': 3108552, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:48,280 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:48,281 INFO sqlalchemy.engine.Engine [cached since 1604s ago] {'municipio_id': 3108552, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:48,432 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:48,434 INFO sqlalchemy.engine.Engine [cached since 1604s ago] {'municipio_id': 3108552, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:48,588 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:48,589 INFO sqlalchemy.engine.Engine [cached since 1604s ago] {'municipio_id': 3108602, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:48,739 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:48,740 INFO sqlalchemy.engine.Engine [cached since 1604s ago] {'municipio_id': 3108602, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:48,889 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:48,890 INFO sqlalchemy.engine.Engine [cached since 1604s ago] {'municipio_id': 3108602, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:49,041 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:49,041 INFO sqlalchemy.engine.Engine [cached since 1605s ago] {'municipio_id': 3108701, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:49,190 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:49,191 INFO sqlalchemy.engine.Engine [cached since 1605s ago] {'municipio_id': 3108701, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:49,341 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:49,342 INFO sqlalchemy.engine.Engine [cached since 1605s ago] {'municipio_id': 3108701, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:49,494 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:49,495 INFO sqlalchemy.engine.Engine [cached since 1605s ago] {'municipio_id': 3108800, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:49,644 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:49,645 INFO sqlalchemy.engine.Engine [cached since 1605s ago] {'municipio_id': 3108800, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:49,794 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:49,794 INFO sqlalchemy.engine.Engine [cached since 1605s ago] {'municipio_id': 3108800, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:49,946 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:49,947 INFO sqlalchemy.engine.Engine [cached since 1605s ago] {'municipio_id': 3108909, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:50,098 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:50,099 INFO sqlalchemy.engine.Engine [cached since 1606s ago] {'municipio_id': 3108909, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:50,249 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:50,251 INFO sqlalchemy.engine.Engine [cached since 1606s ago] {'municipio_id': 3108909, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:50,407 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:50,408 INFO sqlalchemy.engine.Engine [cached since 1606s ago] {'municipio_id': 3109006, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:50,557 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:50,558 INFO sqlalchemy.engine.Engine [cached since 1606s ago] {'municipio_id': 3109006, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:50,708 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:50,708 INFO sqlalchemy.engine.Engine [cached since 1606s ago] {'municipio_id': 3109006, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:50,859 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:50,860 INFO sqlalchemy.engine.Engine [cached since 1606s ago] {'municipio_id': 3109105, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:51,009 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:51,009 INFO sqlalchemy.engine.Engine [cached since 1607s ago] {'municipio_id': 3109105, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:51,166 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:51,175 INFO sqlalchemy.engine.Engine [cached since 1607s ago] {'municipio_id': 3109105, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:51,334 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:51,342 INFO sqlalchemy.engine.Engine [cached since 1607s ago] {'municipio_id': 3109204, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:51,497 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:51,498 INFO sqlalchemy.engine.Engine [cached since 1607s ago] {'municipio_id': 3109204, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:51,650 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:51,651 INFO sqlalchemy.engine.Engine [cached since 1607s ago] {'municipio_id': 3109204, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:51,807 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:51,808 INFO sqlalchemy.engine.Engine [cached since 1607s ago] {'municipio_id': 3109253, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:51,958 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:51,959 INFO sqlalchemy.engine.Engine [cached since 1607s ago] {'municipio_id': 3109253, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:52,112 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:52,112 INFO sqlalchemy.engine.Engine [cached since 1608s ago] {'municipio_id': 3109253, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:52,262 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:52,263 INFO sqlalchemy.engine.Engine [cached since 1608s ago] {'municipio_id': 3109303, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:52,446 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:52,454 INFO sqlalchemy.engine.Engine [cached since 1608s ago] {'municipio_id': 3109303, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:52,606 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:52,612 INFO sqlalchemy.engine.Engine [cached since 1608s ago] {'municipio_id': 3109303, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:52,763 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:52,764 INFO sqlalchemy.engine.Engine [cached since 1608s ago] {'municipio_id': 3109402, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:52,915 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:52,916 INFO sqlalchemy.engine.Engine [cached since 1608s ago] {'municipio_id': 3109402, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:53,065 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:53,065 INFO sqlalchemy.engine.Engine [cached since 1609s ago] {'municipio_id': 3109402, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:53,219 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:53,221 INFO sqlalchemy.engine.Engine [cached since 1609s ago] {'municipio_id': 3109451, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:53,379 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:53,386 INFO sqlalchemy.engine.Engine [cached since 1609s ago] {'municipio_id': 3109451, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:53,539 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:53,544 INFO sqlalchemy.engine.Engine [cached since 1609s ago] {'municipio_id': 3109451, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:53,701 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:53,702 INFO sqlalchemy.engine.Engine [cached since 1609s ago] {'municipio_id': 3109501, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:53,854 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:53,855 INFO sqlalchemy.engine.Engine [cached since 1609s ago] {'municipio_id': 3109501, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:54,008 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:54,009 INFO sqlalchemy.engine.Engine [cached since 1610s ago] {'municipio_id': 3109501, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:54,168 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:54,169 INFO sqlalchemy.engine.Engine [cached since 1610s ago] {'municipio_id': 3109600, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:54,319 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:54,320 INFO sqlalchemy.engine.Engine [cached since 1610s ago] {'municipio_id': 3109600, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:54,471 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:54,473 INFO sqlalchemy.engine.Engine [cached since 1610s ago] {'municipio_id': 3109600, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:54,624 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:54,625 INFO sqlalchemy.engine.Engine [cached since 1610s ago] {'municipio_id': 3109709, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:54,775 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:54,776 INFO sqlalchemy.engine.Engine [cached since 1610s ago] {'municipio_id': 3109709, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:54,927 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:54,928 INFO sqlalchemy.engine.Engine [cached since 1610s ago] {'municipio_id': 3109709, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:55,094 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:55,094 INFO sqlalchemy.engine.Engine [cached since 1611s ago] {'municipio_id': 3109808, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:55,246 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:55,246 INFO sqlalchemy.engine.Engine [cached since 1611s ago] {'municipio_id': 3109808, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:55,394 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:55,395 INFO sqlalchemy.engine.Engine [cached since 1611s ago] {'municipio_id': 3109808, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:55,545 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:55,545 INFO sqlalchemy.engine.Engine [cached since 1611s ago] {'municipio_id': 3109907, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:55,695 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:55,696 INFO sqlalchemy.engine.Engine [cached since 1611s ago] {'municipio_id': 3109907, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:55,847 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:55,848 INFO sqlalchemy.engine.Engine [cached since 1611s ago] {'municipio_id': 3109907, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:56,001 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:56,002 INFO sqlalchemy.engine.Engine [cached since 1612s ago] {'municipio_id': 3110004, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:56,157 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:56,158 INFO sqlalchemy.engine.Engine [cached since 1612s ago] {'municipio_id': 3110004, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:56,309 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:56,310 INFO sqlalchemy.engine.Engine [cached since 1612s ago] {'municipio_id': 3110004, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:56,461 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:56,462 INFO sqlalchemy.engine.Engine [cached since 1612s ago] {'municipio_id': 3110103, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:56,612 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:56,613 INFO sqlalchemy.engine.Engine [cached since 1612s ago] {'municipio_id': 3110103, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:56,761 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:56,762 INFO sqlalchemy.engine.Engine [cached since 1612s ago] {'municipio_id': 3110103, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:56,914 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:56,915 INFO sqlalchemy.engine.Engine [cached since 1612s ago] {'municipio_id': 3110202, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:57,064 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:57,065 INFO sqlalchemy.engine.Engine [cached since 1613s ago] {'municipio_id': 3110202, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:57,218 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:57,218 INFO sqlalchemy.engine.Engine [cached since 1613s ago] {'municipio_id': 3110202, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:57,370 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:57,371 INFO sqlalchemy.engine.Engine [cached since 1613s ago] {'municipio_id': 3110301, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:57,523 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:57,524 INFO sqlalchemy.engine.Engine [cached since 1613s ago] {'municipio_id': 3110301, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:57,677 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:57,677 INFO sqlalchemy.engine.Engine [cached since 1613s ago] {'municipio_id': 3110301, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:57,827 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:57,828 INFO sqlalchemy.engine.Engine [cached since 1613s ago] {'municipio_id': 3110400, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:57,977 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:57,978 INFO sqlalchemy.engine.Engine [cached since 1614s ago] {'municipio_id': 3110400, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:58,127 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:58,128 INFO sqlalchemy.engine.Engine [cached since 1614s ago] {'municipio_id': 3110400, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:58,290 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:58,291 INFO sqlalchemy.engine.Engine [cached since 1614s ago] {'municipio_id': 3110509, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:58,443 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:58,444 INFO sqlalchemy.engine.Engine [cached since 1614s ago] {'municipio_id': 3110509, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:58,592 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:58,593 INFO sqlalchemy.engine.Engine [cached since 1614s ago] {'municipio_id': 3110509, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:58,743 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:58,744 INFO sqlalchemy.engine.Engine [cached since 1614s ago] {'municipio_id': 3110608, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:58,893 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:58,894 INFO sqlalchemy.engine.Engine [cached since 1614s ago] {'municipio_id': 3110608, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:59,046 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:59,047 INFO sqlalchemy.engine.Engine [cached since 1615s ago] {'municipio_id': 3110608, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:59,199 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:59,200 INFO sqlalchemy.engine.Engine [cached since 1615s ago] {'municipio_id': 3110707, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:59,349 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:59,350 INFO sqlalchemy.engine.Engine [cached since 1615s ago] {'municipio_id': 3110707, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:59,499 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:59,500 INFO sqlalchemy.engine.Engine [cached since 1615s ago] {'municipio_id': 3110707, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:48:59,652 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:59,653 INFO sqlalchemy.engine.Engine [cached since 1615s ago] {'municipio_id': 3110806, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:48:59,808 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:59,809 INFO sqlalchemy.engine.Engine [cached since 1615s ago] {'municipio_id': 3110806, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:48:59,960 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:48:59,961 INFO sqlalchemy.engine.Engine [cached since 1615s ago] {'municipio_id': 3110806, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:00,148 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:00,149 INFO sqlalchemy.engine.Engine [cached since 1616s ago] {'municipio_id': 3110905, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:00,328 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:00,329 INFO sqlalchemy.engine.Engine [cached since 1616s ago] {'municipio_id': 3110905, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:00,478 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:00,479 INFO sqlalchemy.engine.Engine [cached since 1616s ago] {'municipio_id': 3110905, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:00,651 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:00,652 INFO sqlalchemy.engine.Engine [cached since 1616s ago] {'municipio_id': 3111002, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:00,802 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:00,803 INFO sqlalchemy.engine.Engine [cached since 1616s ago] {'municipio_id': 3111002, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:00,968 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:00,969 INFO sqlalchemy.engine.Engine [cached since 1616s ago] {'municipio_id': 3111002, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:01,120 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:01,121 INFO sqlalchemy.engine.Engine [cached since 1617s ago] {'municipio_id': 3111101, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:01,271 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:01,272 INFO sqlalchemy.engine.Engine [cached since 1617s ago] {'municipio_id': 3111101, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:01,422 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:01,424 INFO sqlalchemy.engine.Engine [cached since 1617s ago] {'municipio_id': 3111101, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:01,580 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:01,581 INFO sqlalchemy.engine.Engine [cached since 1617s ago] {'municipio_id': 3111150, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:01,729 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:01,730 INFO sqlalchemy.engine.Engine [cached since 1617s ago] {'municipio_id': 3111150, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:01,881 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:01,882 INFO sqlalchemy.engine.Engine [cached since 1617s ago] {'municipio_id': 3111150, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:02,035 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:02,036 INFO sqlalchemy.engine.Engine [cached since 1618s ago] {'municipio_id': 3111200, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:02,187 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:02,188 INFO sqlalchemy.engine.Engine [cached since 1618s ago] {'municipio_id': 3111200, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:02,339 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:02,341 INFO sqlalchemy.engine.Engine [cached since 1618s ago] {'municipio_id': 3111200, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:02,495 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:02,496 INFO sqlalchemy.engine.Engine [cached since 1618s ago] {'municipio_id': 3111309, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:02,645 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:02,646 INFO sqlalchemy.engine.Engine [cached since 1618s ago] {'municipio_id': 3111309, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:02,798 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:02,799 INFO sqlalchemy.engine.Engine [cached since 1618s ago] {'municipio_id': 3111309, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:02,951 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:02,953 INFO sqlalchemy.engine.Engine [cached since 1618s ago] {'municipio_id': 3111408, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:03,105 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:03,106 INFO sqlalchemy.engine.Engine [cached since 1619s ago] {'municipio_id': 3111408, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:03,259 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:03,260 INFO sqlalchemy.engine.Engine [cached since 1619s ago] {'municipio_id': 3111408, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:03,414 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:03,415 INFO sqlalchemy.engine.Engine [cached since 1619s ago] {'municipio_id': 3111507, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:03,578 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:03,579 INFO sqlalchemy.engine.Engine [cached since 1619s ago] {'municipio_id': 3111507, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:03,730 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:03,731 INFO sqlalchemy.engine.Engine [cached since 1619s ago] {'municipio_id': 3111507, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:03,883 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:03,884 INFO sqlalchemy.engine.Engine [cached since 1619s ago] {'municipio_id': 3111606, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:04,034 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:04,034 INFO sqlalchemy.engine.Engine [cached since 1620s ago] {'municipio_id': 3111606, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:04,183 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:04,183 INFO sqlalchemy.engine.Engine [cached since 1620s ago] {'municipio_id': 3111606, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:04,334 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:04,334 INFO sqlalchemy.engine.Engine [cached since 1620s ago] {'municipio_id': 3111705, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:04,485 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:04,486 INFO sqlalchemy.engine.Engine [cached since 1620s ago] {'municipio_id': 3111705, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:04,635 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:04,636 INFO sqlalchemy.engine.Engine [cached since 1620s ago] {'municipio_id': 3111705, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:04,786 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:04,787 INFO sqlalchemy.engine.Engine [cached since 1620s ago] {'municipio_id': 3111804, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:04,936 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:04,936 INFO sqlalchemy.engine.Engine [cached since 1620s ago] {'municipio_id': 3111804, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:05,085 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:05,086 INFO sqlalchemy.engine.Engine [cached since 1621s ago] {'municipio_id': 3111804, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:05,243 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:05,245 INFO sqlalchemy.engine.Engine [cached since 1621s ago] {'municipio_id': 3111903, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:05,399 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:05,400 INFO sqlalchemy.engine.Engine [cached since 1621s ago] {'municipio_id': 3111903, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:05,551 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:05,552 INFO sqlalchemy.engine.Engine [cached since 1621s ago] {'municipio_id': 3111903, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:05,703 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:05,704 INFO sqlalchemy.engine.Engine [cached since 1621s ago] {'municipio_id': 3112000, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:05,854 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:05,855 INFO sqlalchemy.engine.Engine [cached since 1621s ago] {'municipio_id': 3112000, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:06,006 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:06,012 INFO sqlalchemy.engine.Engine [cached since 1622s ago] {'municipio_id': 3112000, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:06,169 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:06,170 INFO sqlalchemy.engine.Engine [cached since 1622s ago] {'municipio_id': 3112059, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:06,326 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:06,328 INFO sqlalchemy.engine.Engine [cached since 1622s ago] {'municipio_id': 3112059, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:06,483 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:06,484 INFO sqlalchemy.engine.Engine [cached since 1622s ago] {'municipio_id': 3112059, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:06,634 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:06,634 INFO sqlalchemy.engine.Engine [cached since 1622s ago] {'municipio_id': 3112109, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:06,793 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:06,796 INFO sqlalchemy.engine.Engine [cached since 1622s ago] {'municipio_id': 3112109, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:06,949 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:06,950 INFO sqlalchemy.engine.Engine [cached since 1622s ago] {'municipio_id': 3112109, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:07,101 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:07,101 INFO sqlalchemy.engine.Engine [cached since 1623s ago] {'municipio_id': 3112208, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:07,252 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:07,253 INFO sqlalchemy.engine.Engine [cached since 1623s ago] {'municipio_id': 3112208, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:07,404 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:07,404 INFO sqlalchemy.engine.Engine [cached since 1623s ago] {'municipio_id': 3112208, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:07,558 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:07,559 INFO sqlalchemy.engine.Engine [cached since 1623s ago] {'municipio_id': 3112307, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:07,711 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:07,714 INFO sqlalchemy.engine.Engine [cached since 1623s ago] {'municipio_id': 3112307, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:07,865 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:07,866 INFO sqlalchemy.engine.Engine [cached since 1623s ago] {'municipio_id': 3112307, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:08,016 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:08,017 INFO sqlalchemy.engine.Engine [cached since 1624s ago] {'municipio_id': 3112406, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:08,168 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:08,168 INFO sqlalchemy.engine.Engine [cached since 1624s ago] {'municipio_id': 3112406, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:08,321 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:08,321 INFO sqlalchemy.engine.Engine [cached since 1624s ago] {'municipio_id': 3112406, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:08,472 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:08,473 INFO sqlalchemy.engine.Engine [cached since 1624s ago] {'municipio_id': 3112505, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:08,624 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:08,624 INFO sqlalchemy.engine.Engine [cached since 1624s ago] {'municipio_id': 3112505, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:08,775 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:08,778 INFO sqlalchemy.engine.Engine [cached since 1624s ago] {'municipio_id': 3112505, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:08,932 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:08,933 INFO sqlalchemy.engine.Engine [cached since 1624s ago] {'municipio_id': 3112604, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:09,083 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:09,084 INFO sqlalchemy.engine.Engine [cached since 1625s ago] {'municipio_id': 3112604, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:09,234 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:09,235 INFO sqlalchemy.engine.Engine [cached since 1625s ago] {'municipio_id': 3112604, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:09,385 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:09,386 INFO sqlalchemy.engine.Engine [cached since 1625s ago] {'municipio_id': 3112653, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:09,536 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:09,537 INFO sqlalchemy.engine.Engine [cached since 1625s ago] {'municipio_id': 3112653, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:09,687 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:09,688 INFO sqlalchemy.engine.Engine [cached since 1625s ago] {'municipio_id': 3112653, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:09,838 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:09,839 INFO sqlalchemy.engine.Engine [cached since 1625s ago] {'municipio_id': 3112703, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:09,995 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:09,996 INFO sqlalchemy.engine.Engine [cached since 1626s ago] {'municipio_id': 3112703, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:10,148 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:10,149 INFO sqlalchemy.engine.Engine [cached since 1626s ago] {'municipio_id': 3112703, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:10,301 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:10,302 INFO sqlalchemy.engine.Engine [cached since 1626s ago] {'municipio_id': 3112802, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:10,451 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:10,451 INFO sqlalchemy.engine.Engine [cached since 1626s ago] {'municipio_id': 3112802, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:10,600 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:10,601 INFO sqlalchemy.engine.Engine [cached since 1626s ago] {'municipio_id': 3112802, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:10,753 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:10,755 INFO sqlalchemy.engine.Engine [cached since 1626s ago] {'municipio_id': 3112901, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:10,908 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:10,909 INFO sqlalchemy.engine.Engine [cached since 1626s ago] {'municipio_id': 3112901, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:11,059 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:11,060 INFO sqlalchemy.engine.Engine [cached since 1627s ago] {'municipio_id': 3112901, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:11,235 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:11,237 INFO sqlalchemy.engine.Engine [cached since 1627s ago] {'municipio_id': 3113008, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:11,386 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:11,387 INFO sqlalchemy.engine.Engine [cached since 1627s ago] {'municipio_id': 3113008, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:11,545 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:11,549 INFO sqlalchemy.engine.Engine [cached since 1627s ago] {'municipio_id': 3113008, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:11,714 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:11,715 INFO sqlalchemy.engine.Engine [cached since 1627s ago] {'municipio_id': 3113107, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:11,876 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:11,877 INFO sqlalchemy.engine.Engine [cached since 1627s ago] {'municipio_id': 3113107, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:12,032 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:12,034 INFO sqlalchemy.engine.Engine [cached since 1628s ago] {'municipio_id': 3113107, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:12,187 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:12,188 INFO sqlalchemy.engine.Engine [cached since 1628s ago] {'municipio_id': 3113206, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:12,338 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:12,341 INFO sqlalchemy.engine.Engine [cached since 1628s ago] {'municipio_id': 3113206, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:12,493 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:12,494 INFO sqlalchemy.engine.Engine [cached since 1628s ago] {'municipio_id': 3113206, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:12,648 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:12,651 INFO sqlalchemy.engine.Engine [cached since 1628s ago] {'municipio_id': 3113305, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:12,822 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:12,823 INFO sqlalchemy.engine.Engine [cached since 1628s ago] {'municipio_id': 3113305, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:12,973 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:12,974 INFO sqlalchemy.engine.Engine [cached since 1629s ago] {'municipio_id': 3113305, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:13,126 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:13,128 INFO sqlalchemy.engine.Engine [cached since 1629s ago] {'municipio_id': 3113404, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:13,282 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:13,284 INFO sqlalchemy.engine.Engine [cached since 1629s ago] {'municipio_id': 3113404, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:13,436 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:13,438 INFO sqlalchemy.engine.Engine [cached since 1629s ago] {'municipio_id': 3113404, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:13,593 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:13,594 INFO sqlalchemy.engine.Engine [cached since 1629s ago] {'municipio_id': 3113503, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:13,743 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:13,744 INFO sqlalchemy.engine.Engine [cached since 1629s ago] {'municipio_id': 3113503, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:13,894 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:13,897 INFO sqlalchemy.engine.Engine [cached since 1629s ago] {'municipio_id': 3113503, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:14,052 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:14,055 INFO sqlalchemy.engine.Engine [cached since 1630s ago] {'municipio_id': 3113602, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:14,207 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:14,208 INFO sqlalchemy.engine.Engine [cached since 1630s ago] {'municipio_id': 3113602, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:14,359 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:14,360 INFO sqlalchemy.engine.Engine [cached since 1630s ago] {'municipio_id': 3113602, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:14,519 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:14,521 INFO sqlalchemy.engine.Engine [cached since 1630s ago] {'municipio_id': 3113701, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:14,672 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:14,673 INFO sqlalchemy.engine.Engine [cached since 1630s ago] {'municipio_id': 3113701, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:14,827 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:14,828 INFO sqlalchemy.engine.Engine [cached since 1630s ago] {'municipio_id': 3113701, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:14,984 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:14,986 INFO sqlalchemy.engine.Engine [cached since 1631s ago] {'municipio_id': 3113800, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:15,138 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:15,139 INFO sqlalchemy.engine.Engine [cached since 1631s ago] {'municipio_id': 3113800, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:15,293 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:15,300 INFO sqlalchemy.engine.Engine [cached since 1631s ago] {'municipio_id': 3113800, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:15,455 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:15,455 INFO sqlalchemy.engine.Engine [cached since 1631s ago] {'municipio_id': 3113909, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:15,606 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:15,607 INFO sqlalchemy.engine.Engine [cached since 1631s ago] {'municipio_id': 3113909, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:15,758 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:15,758 INFO sqlalchemy.engine.Engine [cached since 1631s ago] {'municipio_id': 3113909, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:15,920 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:15,923 INFO sqlalchemy.engine.Engine [cached since 1631s ago] {'municipio_id': 3114006, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:16,075 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:16,077 INFO sqlalchemy.engine.Engine [cached since 1632s ago] {'municipio_id': 3114006, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:16,232 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:16,240 INFO sqlalchemy.engine.Engine [cached since 1632s ago] {'municipio_id': 3114006, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:16,396 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:16,397 INFO sqlalchemy.engine.Engine [cached since 1632s ago] {'municipio_id': 3114105, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:16,550 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:16,551 INFO sqlalchemy.engine.Engine [cached since 1632s ago] {'municipio_id': 3114105, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:16,711 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:16,712 INFO sqlalchemy.engine.Engine [cached since 1632s ago] {'municipio_id': 3114105, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:16,869 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:16,870 INFO sqlalchemy.engine.Engine [cached since 1632s ago] {'municipio_id': 3114204, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:17,020 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:17,021 INFO sqlalchemy.engine.Engine [cached since 1633s ago] {'municipio_id': 3114204, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:17,172 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:17,173 INFO sqlalchemy.engine.Engine [cached since 1633s ago] {'municipio_id': 3114204, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:17,327 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:17,328 INFO sqlalchemy.engine.Engine [cached since 1633s ago] {'municipio_id': 3114303, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:17,479 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:17,484 INFO sqlalchemy.engine.Engine [cached since 1633s ago] {'municipio_id': 3114303, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:17,637 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:17,643 INFO sqlalchemy.engine.Engine [cached since 1633s ago] {'municipio_id': 3114303, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:17,802 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:17,804 INFO sqlalchemy.engine.Engine [cached since 1633s ago] {'municipio_id': 3114402, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:17,968 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:17,969 INFO sqlalchemy.engine.Engine [cached since 1633s ago] {'municipio_id': 3114402, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:18,119 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:18,120 INFO sqlalchemy.engine.Engine [cached since 1634s ago] {'municipio_id': 3114402, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:18,277 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:18,279 INFO sqlalchemy.engine.Engine [cached since 1634s ago] {'municipio_id': 3114501, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:18,431 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:18,435 INFO sqlalchemy.engine.Engine [cached since 1634s ago] {'municipio_id': 3114501, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:18,588 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:18,589 INFO sqlalchemy.engine.Engine [cached since 1634s ago] {'municipio_id': 3114501, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:18,744 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:18,745 INFO sqlalchemy.engine.Engine [cached since 1634s ago] {'municipio_id': 3114550, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:18,895 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:18,895 INFO sqlalchemy.engine.Engine [cached since 1634s ago] {'municipio_id': 3114550, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:19,044 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:19,045 INFO sqlalchemy.engine.Engine [cached since 1635s ago] {'municipio_id': 3114550, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:19,197 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:19,199 INFO sqlalchemy.engine.Engine [cached since 1635s ago] {'municipio_id': 3114600, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:19,349 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:19,351 INFO sqlalchemy.engine.Engine [cached since 1635s ago] {'municipio_id': 3114600, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:19,505 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:19,505 INFO sqlalchemy.engine.Engine [cached since 1635s ago] {'municipio_id': 3114600, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:19,656 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:19,657 INFO sqlalchemy.engine.Engine [cached since 1635s ago] {'municipio_id': 3114709, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:19,807 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:19,808 INFO sqlalchemy.engine.Engine [cached since 1635s ago] {'municipio_id': 3114709, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:19,959 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:19,960 INFO sqlalchemy.engine.Engine [cached since 1635s ago] {'municipio_id': 3114709, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:20,108 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:20,109 INFO sqlalchemy.engine.Engine [cached since 1636s ago] {'municipio_id': 3114808, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:20,286 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:20,287 INFO sqlalchemy.engine.Engine [cached since 1636s ago] {'municipio_id': 3114808, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:20,439 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:20,440 INFO sqlalchemy.engine.Engine [cached since 1636s ago] {'municipio_id': 3114808, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:20,592 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:20,593 INFO sqlalchemy.engine.Engine [cached since 1636s ago] {'municipio_id': 3114907, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:20,743 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:20,744 INFO sqlalchemy.engine.Engine [cached since 1636s ago] {'municipio_id': 3114907, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:20,894 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:20,895 INFO sqlalchemy.engine.Engine [cached since 1636s ago] {'municipio_id': 3114907, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:21,044 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:21,045 INFO sqlalchemy.engine.Engine [cached since 1637s ago] {'municipio_id': 3115003, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:21,195 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:21,196 INFO sqlalchemy.engine.Engine [cached since 1637s ago] {'municipio_id': 3115003, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:21,348 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:21,352 INFO sqlalchemy.engine.Engine [cached since 1637s ago] {'municipio_id': 3115003, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:21,509 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:21,510 INFO sqlalchemy.engine.Engine [cached since 1637s ago] {'municipio_id': 3115102, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:21,660 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:21,662 INFO sqlalchemy.engine.Engine [cached since 1637s ago] {'municipio_id': 3115102, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:21,811 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:21,812 INFO sqlalchemy.engine.Engine [cached since 1637s ago] {'municipio_id': 3115102, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:21,965 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:21,969 INFO sqlalchemy.engine.Engine [cached since 1637s ago] {'municipio_id': 3115201, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:22,121 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:22,122 INFO sqlalchemy.engine.Engine [cached since 1638s ago] {'municipio_id': 3115201, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:22,272 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:22,272 INFO sqlalchemy.engine.Engine [cached since 1638s ago] {'municipio_id': 3115201, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:22,422 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:22,423 INFO sqlalchemy.engine.Engine [cached since 1638s ago] {'municipio_id': 3115300, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:22,572 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:22,572 INFO sqlalchemy.engine.Engine [cached since 1638s ago] {'municipio_id': 3115300, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:22,721 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:22,722 INFO sqlalchemy.engine.Engine [cached since 1638s ago] {'municipio_id': 3115300, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:22,873 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:22,873 INFO sqlalchemy.engine.Engine [cached since 1638s ago] {'municipio_id': 3115359, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:23,022 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:23,023 INFO sqlalchemy.engine.Engine [cached since 1639s ago] {'municipio_id': 3115359, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:23,172 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:23,173 INFO sqlalchemy.engine.Engine [cached since 1639s ago] {'municipio_id': 3115359, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:23,325 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:23,327 INFO sqlalchemy.engine.Engine [cached since 1639s ago] {'municipio_id': 3115409, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:23,475 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:23,476 INFO sqlalchemy.engine.Engine [cached since 1639s ago] {'municipio_id': 3115409, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:23,626 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:23,627 INFO sqlalchemy.engine.Engine [cached since 1639s ago] {'municipio_id': 3115409, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:23,783 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:23,786 INFO sqlalchemy.engine.Engine [cached since 1639s ago] {'municipio_id': 3115458, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:23,938 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:23,939 INFO sqlalchemy.engine.Engine [cached since 1639s ago] {'municipio_id': 3115458, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:24,088 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:24,089 INFO sqlalchemy.engine.Engine [cached since 1640s ago] {'municipio_id': 3115458, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:24,239 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:24,240 INFO sqlalchemy.engine.Engine [cached since 1640s ago] {'municipio_id': 3115474, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:24,390 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:24,391 INFO sqlalchemy.engine.Engine [cached since 1640s ago] {'municipio_id': 3115474, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:24,541 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:24,542 INFO sqlalchemy.engine.Engine [cached since 1640s ago] {'municipio_id': 3115474, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:24,694 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:24,695 INFO sqlalchemy.engine.Engine [cached since 1640s ago] {'municipio_id': 3115508, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:24,848 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:24,849 INFO sqlalchemy.engine.Engine [cached since 1640s ago] {'municipio_id': 3115508, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:25,001 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:25,003 INFO sqlalchemy.engine.Engine [cached since 1641s ago] {'municipio_id': 3115508, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:25,157 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:25,158 INFO sqlalchemy.engine.Engine [cached since 1641s ago] {'municipio_id': 3115607, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:25,307 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:25,308 INFO sqlalchemy.engine.Engine [cached since 1641s ago] {'municipio_id': 3115607, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:25,459 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:25,459 INFO sqlalchemy.engine.Engine [cached since 1641s ago] {'municipio_id': 3115607, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:25,612 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:25,612 INFO sqlalchemy.engine.Engine [cached since 1641s ago] {'municipio_id': 3115706, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:25,764 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:25,765 INFO sqlalchemy.engine.Engine [cached since 1641s ago] {'municipio_id': 3115706, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:25,915 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:25,916 INFO sqlalchemy.engine.Engine [cached since 1641s ago] {'municipio_id': 3115706, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:26,070 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:26,071 INFO sqlalchemy.engine.Engine [cached since 1642s ago] {'municipio_id': 3115805, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:26,222 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:26,223 INFO sqlalchemy.engine.Engine [cached since 1642s ago] {'municipio_id': 3115805, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:26,383 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:26,384 INFO sqlalchemy.engine.Engine [cached since 1642s ago] {'municipio_id': 3115805, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:26,539 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:26,540 INFO sqlalchemy.engine.Engine [cached since 1642s ago] {'municipio_id': 3115904, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:26,692 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:26,693 INFO sqlalchemy.engine.Engine [cached since 1642s ago] {'municipio_id': 3115904, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:26,844 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:26,845 INFO sqlalchemy.engine.Engine [cached since 1642s ago] {'municipio_id': 3115904, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:26,997 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:26,998 INFO sqlalchemy.engine.Engine [cached since 1643s ago] {'municipio_id': 3116001, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:27,148 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:27,150 INFO sqlalchemy.engine.Engine [cached since 1643s ago] {'municipio_id': 3116001, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:27,300 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:27,301 INFO sqlalchemy.engine.Engine [cached since 1643s ago] {'municipio_id': 3116001, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:27,457 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:27,458 INFO sqlalchemy.engine.Engine [cached since 1643s ago] {'municipio_id': 3116100, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:27,609 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:27,610 INFO sqlalchemy.engine.Engine [cached since 1643s ago] {'municipio_id': 3116100, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:27,761 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:27,762 INFO sqlalchemy.engine.Engine [cached since 1643s ago] {'municipio_id': 3116100, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:27,914 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:27,915 INFO sqlalchemy.engine.Engine [cached since 1643s ago] {'municipio_id': 3116159, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:28,065 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:28,067 INFO sqlalchemy.engine.Engine [cached since 1644s ago] {'municipio_id': 3116159, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:28,223 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:28,224 INFO sqlalchemy.engine.Engine [cached since 1644s ago] {'municipio_id': 3116159, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:28,377 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:28,378 INFO sqlalchemy.engine.Engine [cached since 1644s ago] {'municipio_id': 3116209, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:28,530 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:28,536 INFO sqlalchemy.engine.Engine [cached since 1644s ago] {'municipio_id': 3116209, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:28,691 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:28,697 INFO sqlalchemy.engine.Engine [cached since 1644s ago] {'municipio_id': 3116209, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:28,856 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:28,857 INFO sqlalchemy.engine.Engine [cached since 1644s ago] {'municipio_id': 3116308, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:29,008 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:29,010 INFO sqlalchemy.engine.Engine [cached since 1645s ago] {'municipio_id': 3116308, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:29,162 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:29,163 INFO sqlalchemy.engine.Engine [cached since 1645s ago] {'municipio_id': 3116308, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:29,313 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:29,314 INFO sqlalchemy.engine.Engine [cached since 1645s ago] {'municipio_id': 3116407, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:29,464 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:29,465 INFO sqlalchemy.engine.Engine [cached since 1645s ago] {'municipio_id': 3116407, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:29,615 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:29,616 INFO sqlalchemy.engine.Engine [cached since 1645s ago] {'municipio_id': 3116407, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:29,769 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:29,774 INFO sqlalchemy.engine.Engine [cached since 1645s ago] {'municipio_id': 3116506, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:29,931 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:29,931 INFO sqlalchemy.engine.Engine [cached since 1645s ago] {'municipio_id': 3116506, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:30,083 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:30,083 INFO sqlalchemy.engine.Engine [cached since 1646s ago] {'municipio_id': 3116506, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:30,233 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:30,233 INFO sqlalchemy.engine.Engine [cached since 1646s ago] {'municipio_id': 3116605, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:30,396 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:30,397 INFO sqlalchemy.engine.Engine [cached since 1646s ago] {'municipio_id': 3116605, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:30,545 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:30,546 INFO sqlalchemy.engine.Engine [cached since 1646s ago] {'municipio_id': 3116605, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:30,698 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:30,699 INFO sqlalchemy.engine.Engine [cached since 1646s ago] {'municipio_id': 3116704, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:30,848 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:30,849 INFO sqlalchemy.engine.Engine [cached since 1646s ago] {'municipio_id': 3116704, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:31,000 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:31,001 INFO sqlalchemy.engine.Engine [cached since 1647s ago] {'municipio_id': 3116704, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:31,150 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:31,151 INFO sqlalchemy.engine.Engine [cached since 1647s ago] {'municipio_id': 3116803, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:31,302 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:31,303 INFO sqlalchemy.engine.Engine [cached since 1647s ago] {'municipio_id': 3116803, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:31,458 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:31,459 INFO sqlalchemy.engine.Engine [cached since 1647s ago] {'municipio_id': 3116803, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:31,620 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:31,622 INFO sqlalchemy.engine.Engine [cached since 1647s ago] {'municipio_id': 3116902, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:31,776 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:31,779 INFO sqlalchemy.engine.Engine [cached since 1647s ago] {'municipio_id': 3116902, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:31,930 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:31,931 INFO sqlalchemy.engine.Engine [cached since 1647s ago] {'municipio_id': 3116902, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:32,086 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:32,087 INFO sqlalchemy.engine.Engine [cached since 1648s ago] {'municipio_id': 3117009, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:32,242 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:32,243 INFO sqlalchemy.engine.Engine [cached since 1648s ago] {'municipio_id': 3117009, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:32,396 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:32,397 INFO sqlalchemy.engine.Engine [cached since 1648s ago] {'municipio_id': 3117009, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:32,547 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:32,548 INFO sqlalchemy.engine.Engine [cached since 1648s ago] {'municipio_id': 3117108, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:32,698 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:32,699 INFO sqlalchemy.engine.Engine [cached since 1648s ago] {'municipio_id': 3117108, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:32,852 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:32,853 INFO sqlalchemy.engine.Engine [cached since 1648s ago] {'municipio_id': 3117108, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:33,007 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:33,008 INFO sqlalchemy.engine.Engine [cached since 1649s ago] {'municipio_id': 3117207, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:33,160 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:33,161 INFO sqlalchemy.engine.Engine [cached since 1649s ago] {'municipio_id': 3117207, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:33,312 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:33,313 INFO sqlalchemy.engine.Engine [cached since 1649s ago] {'municipio_id': 3117207, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:33,465 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:33,466 INFO sqlalchemy.engine.Engine [cached since 1649s ago] {'municipio_id': 3117306, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:33,615 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:33,616 INFO sqlalchemy.engine.Engine [cached since 1649s ago] {'municipio_id': 3117306, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:33,768 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:33,769 INFO sqlalchemy.engine.Engine [cached since 1649s ago] {'municipio_id': 3117306, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:33,924 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:33,926 INFO sqlalchemy.engine.Engine [cached since 1649s ago] {'municipio_id': 3117405, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:34,078 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:34,079 INFO sqlalchemy.engine.Engine [cached since 1650s ago] {'municipio_id': 3117405, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:34,229 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:34,230 INFO sqlalchemy.engine.Engine [cached since 1650s ago] {'municipio_id': 3117405, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:34,439 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:34,440 INFO sqlalchemy.engine.Engine [cached since 1650s ago] {'municipio_id': 3117504, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:34,593 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:34,594 INFO sqlalchemy.engine.Engine [cached since 1650s ago] {'municipio_id': 3117504, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:34,745 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:34,746 INFO sqlalchemy.engine.Engine [cached since 1650s ago] {'municipio_id': 3117504, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:34,920 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:34,921 INFO sqlalchemy.engine.Engine [cached since 1650s ago] {'municipio_id': 3117603, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:35,071 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:35,074 INFO sqlalchemy.engine.Engine [cached since 1651s ago] {'municipio_id': 3117603, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:35,244 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:35,244 INFO sqlalchemy.engine.Engine [cached since 1651s ago] {'municipio_id': 3117603, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:35,405 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:35,406 INFO sqlalchemy.engine.Engine [cached since 1651s ago] {'municipio_id': 3117702, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:35,558 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:35,559 INFO sqlalchemy.engine.Engine [cached since 1651s ago] {'municipio_id': 3117702, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:35,711 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:35,712 INFO sqlalchemy.engine.Engine [cached since 1651s ago] {'municipio_id': 3117702, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:35,885 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:35,886 INFO sqlalchemy.engine.Engine [cached since 1651s ago] {'municipio_id': 3117801, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:36,035 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:36,036 INFO sqlalchemy.engine.Engine [cached since 1652s ago] {'municipio_id': 3117801, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:36,185 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:36,186 INFO sqlalchemy.engine.Engine [cached since 1652s ago] {'municipio_id': 3117801, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:36,338 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:36,339 INFO sqlalchemy.engine.Engine [cached since 1652s ago] {'municipio_id': 3117836, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:36,494 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:36,495 INFO sqlalchemy.engine.Engine [cached since 1652s ago] {'municipio_id': 3117836, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:36,647 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:36,648 INFO sqlalchemy.engine.Engine [cached since 1652s ago] {'municipio_id': 3117836, 'etapa_de_ensino': 'EM', 'ano': 2022}\n", + "2024-08-28 00:49:36,802 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:36,803 INFO sqlalchemy.engine.Engine [cached since 1652s ago] {'municipio_id': 3117876, 'etapa_de_ensino': 'EF1', 'ano': 2022}\n", + "2024-08-28 00:49:36,951 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:36,952 INFO sqlalchemy.engine.Engine [cached since 1652s ago] {'municipio_id': 3117876, 'etapa_de_ensino': 'EF2', 'ano': 2022}\n", + "2024-08-28 00:49:37,104 INFO sqlalchemy.engine.Engine INSERT INTO \"Filtro\" (municipio_id, etapa_de_ensino, ano) VALUES (%(municipio_id)s, %(etapa_de_ensino)s, %(ano)s) RETURNING \"Filtro\".id\n", + "2024-08-28 00:49:37,104 INFO sqlalchemy.engine.Engine [cached since 1653s ago] {'municipio_id': 3117876, 'etapa_de_ensino': 'EM', 'ano': 2022}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n", + "KeyboardInterrupt\n", + "\n" + ] + } + ], + "source": [ + "alternate_file_and_insert2(ALL_INDICATORS_FILE_PATH)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Insert Todos\n" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "def municipios2_sum_query_df(session: Session):\n", + " query = (\n", + " session.query(\n", + " Filtro.etapa_de_ensino,\n", + " Filtro.ano,\n", + " Indicador.dependencia_administrativa,\n", + " func.avg(Indicador.taxa_de_aprovacao).label('taxa_de_aprovacao'),\n", + " func.avg(Indicador.taxa_de_reprovacao).label('taxa_de_reprovacao'),\n", + " func.avg(Indicador.taxa_de_abandono).label('taxa_de_abandono')\n", + " )\n", + " .join(Indicador, Filtro.id == Indicador.id_filtro)\n", + " .filter(Filtro.municipio_id != 1)\n", + " .filter(Filtro.etapa_de_ensino != 'Todos')\n", + " .group_by(\n", + " Filtro.etapa_de_ensino,\n", + " Filtro.ano,\n", + " Indicador.dependencia_administrativa\n", + " )\n", + " .order_by(\n", + " Filtro.ano,\n", + " Filtro.etapa_de_ensino,\n", + " Indicador.dependencia_administrativa\n", + " )\n", + " )\n", + "\n", + " # Executar a query\n", + " results = query.all()\n", + " # Converter resultados em DataFrame\n", + " df = pd.DataFrame(results,\n", + " columns=[\n", + " 'etapa_de_ensino',\n", + " 'ano',\n", + " 'dependencia_administrativa',\n", + " 'taxa_de_aprovacao',\n", + " 'taxa_de_reprovacao',\n", + " 'taxa_de_abandono'\n", + " ])\n", + " df['municipio_id'] = 1\n", + " \n", + " display(df)\n", + " return df\n", + "\n", + "def etapa_de_ensino2_sum(session: Session):\n", + " query = (\n", + " session.query(\n", + " Filtro.municipio_id,\n", + " Filtro.ano,\n", + " Indicador.dependencia_administrativa,\n", + " func.avg(Indicador.taxa_de_aprovacao).label('taxa_de_aprovacao'),\n", + " func.avg(Indicador.taxa_de_reprovacao).label('taxa_de_reprovacao'),\n", + " func.avg(Indicador.taxa_de_abandono).label('taxa_de_abandono')\n", + " )\n", + " .join(Indicador, Filtro.id == Indicador.id_filtro)\n", + " .filter(Filtro.municipio_id != 1)\n", + " .filter(Filtro.etapa_de_ensino != 'Todos')\n", + " .group_by(\n", + " Filtro.municipio_id,\n", + " Filtro.ano,\n", + " Indicador.dependencia_administrativa\n", + " )\n", + " .order_by(\n", + " Filtro.ano,\n", + " Filtro.municipio_id,\n", + " Indicador.dependencia_administrativa\n", + " )\n", + " )\n", + " \n", + " # Executar a query\n", + " results = query.all()\n", + " # Converter resultados em DataFrame\n", + " df = pd.DataFrame(results,\n", + " columns=[\n", + " 'municipio_id',\n", + " 'ano',\n", + " 'dependencia_administrativa',\n", + " 'taxa_de_aprovacao',\n", + " 'taxa_de_reprovacao',\n", + " 'taxa_de_abandono'\n", + " ])\n", + " df['etapa_de_ensino'] = 'Todos'\n", + " \n", + " display(df)\n", + " return df\n", + "\n", + "def municipios_etapa_de_ensino2_sum(session: Session):\n", + " query = (\n", + " session.query(\n", + " Filtro.ano,\n", + " Indicador.dependencia_administrativa,\n", + " func.avg(Indicador.taxa_de_aprovacao).label('taxa_de_aprovacao'),\n", + " func.avg(Indicador.taxa_de_reprovacao).label('taxa_de_reprovacao'),\n", + " func.avg(Indicador.taxa_de_abandono).label('taxa_de_abandono')\n", + " )\n", + " .join(Indicador, Filtro.id == Indicador.id_filtro)\n", + " .filter(Filtro.municipio_id != 1)\n", + " .filter(Filtro.etapa_de_ensino != 'Todos')\n", + " .group_by(\n", + " Filtro.ano,\n", + " Indicador.dependencia_administrativa\n", + " )\n", + " .order_by(\n", + " Filtro.ano,\n", + " Indicador.dependencia_administrativa\n", + " )\n", + " )\n", + "\n", + " # Executar a query\n", + " results = query.all()\n", + " # Converter resultados em DataFrame\n", + " df = pd.DataFrame(results,\n", + " columns=[\n", + " 'ano',\n", + " 'dependencia_administrativa',\n", + " 'taxa_de_aprovacao',\n", + " 'taxa_de_reprovacao',\n", + " 'taxa_de_abandono'\n", + " ])\n", + " df['etapa_de_ensino'] = 'Todos'\n", + " df['municipio_id'] = 1\n", + " \n", + " display(df)\n", + " return df\n", + "\n", + "def send_combination2(session: Session):\n", + " check_and_create_all_municipios_id(session=session)\n", + " query_df = municipios_etapa_de_ensino2_sum(session=session)\n", + " bulk_insert_data2(full_table_data=query_df)\n", + "\n", + "def send_etapa_de_ensino_sum_to_db2(session: Session):\n", + " query_df = etapa_de_ensino2_sum(session=session)\n", + " bulk_insert_data2(full_table_data=query_df)\n", + "\n", + "def send_municipios_sum_to_db2(session: Session):\n", + " check_and_create_all_municipios_id(session=session)\n", + " query_df = municipios2_sum_query_df(session=session)\n", + " bulk_insert_data2(full_table_data=query_df)\n", + "\n", + "def insert_total2():\n", + " with Session(engine) as session:\n", + " send_municipios_sum_to_db2(session=session)\n", + " send_etapa_de_ensino_sum_to_db2(session=session)\n", + " send_combination2(session=session)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-28 00:19:33,189 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:19:33,196 INFO sqlalchemy.engine.Engine SELECT \"Municipio\".id AS \"Municipio_id\", \"Municipio\".nome AS \"Municipio_nome\", \"Municipio\".\"UF\" AS \"Municipio_UF\" \n", + "FROM \"Municipio\" \n", + "WHERE \"Municipio\".id = %(id_1)s \n", + " LIMIT %(param_1)s\n", + "2024-08-28 00:19:33,197 INFO sqlalchemy.engine.Engine [generated in 0.00116s] {'id_1': 1, 'param_1': 1}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-28 00:19:33,507 INFO sqlalchemy.engine.Engine INSERT INTO \"Municipio\" (id, nome, \"UF\") VALUES (%(id)s, %(nome)s, %(UF)s)\n", + "2024-08-28 00:19:33,509 INFO sqlalchemy.engine.Engine [generated in 0.00178s] {'id': 1, 'nome': 'Todos', 'UF': 'MG'}\n", + "2024-08-28 00:19:33,665 INFO sqlalchemy.engine.Engine COMMIT\n", + "2024-08-28 00:19:33,820 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:19:33,826 INFO sqlalchemy.engine.Engine SELECT \"Filtro\".etapa_de_ensino AS \"Filtro_etapa_de_ensino\", \"Filtro\".ano AS \"Filtro_ano\", \"Indicador\".dependencia_administrativa AS \"Indicador_dependencia_administrativa\", avg(\"Indicador\".taxa_de_aprovacao) AS taxa_de_aprovacao, avg(\"Indicador\".taxa_de_reprovacao) AS taxa_de_reprovacao, avg(\"Indicador\".taxa_de_abandono) AS taxa_de_abandono \n", + "FROM \"Filtro\" JOIN \"Indicador\" ON \"Filtro\".id = \"Indicador\".id_filtro \n", + "WHERE \"Filtro\".municipio_id != %(municipio_id_1)s AND \"Filtro\".etapa_de_ensino != %(etapa_de_ensino_1)s GROUP BY \"Filtro\".etapa_de_ensino, \"Filtro\".ano, \"Indicador\".dependencia_administrativa ORDER BY \"Filtro\".ano, \"Filtro\".etapa_de_ensino, \"Indicador\".dependencia_administrativa\n", + "2024-08-28 00:19:33,827 INFO sqlalchemy.engine.Engine [generated in 0.00167s] {'municipio_id_1': 1, 'etapa_de_ensino_1': 'Todos'}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
etapa_de_ensinoanodependencia_administrativataxa_de_aprovacaotaxa_de_reprovacaotaxa_de_abandonomunicipio_id
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [etapa_de_ensino, ano, dependencia_administrativa, taxa_de_aprovacao, taxa_de_reprovacao, taxa_de_abandono, municipio_id]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-28 00:19:35,193 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:19:35,196 INFO sqlalchemy.engine.Engine SELECT \"Filtro\".id AS \"Filtro_id\", \"Filtro\".municipio_id AS \"Filtro_municipio_id\", \"Filtro\".etapa_de_ensino AS \"Filtro_etapa_de_ensino\", \"Filtro\".ano AS \"Filtro_ano\" \n", + "FROM \"Filtro\"\n", + "2024-08-28 00:19:35,197 INFO sqlalchemy.engine.Engine [generated in 0.00112s] {}\n", + "2024-08-28 00:19:35,501 INFO sqlalchemy.engine.Engine ROLLBACK\n", + "2024-08-28 00:19:35,656 INFO sqlalchemy.engine.Engine SELECT \"Filtro\".municipio_id AS \"Filtro_municipio_id\", \"Filtro\".ano AS \"Filtro_ano\", \"Indicador\".dependencia_administrativa AS \"Indicador_dependencia_administrativa\", avg(\"Indicador\".taxa_de_aprovacao) AS taxa_de_aprovacao, avg(\"Indicador\".taxa_de_reprovacao) AS taxa_de_reprovacao, avg(\"Indicador\".taxa_de_abandono) AS taxa_de_abandono \n", + "FROM \"Filtro\" JOIN \"Indicador\" ON \"Filtro\".id = \"Indicador\".id_filtro \n", + "WHERE \"Filtro\".municipio_id != %(municipio_id_1)s AND \"Filtro\".etapa_de_ensino != %(etapa_de_ensino_1)s GROUP BY \"Filtro\".municipio_id, \"Filtro\".ano, \"Indicador\".dependencia_administrativa ORDER BY \"Filtro\".ano, \"Filtro\".municipio_id, \"Indicador\".dependencia_administrativa\n", + "2024-08-28 00:19:35,657 INFO sqlalchemy.engine.Engine [generated in 0.00071s] {'municipio_id_1': 1, 'etapa_de_ensino_1': 'Todos'}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
municipio_idanodependencia_administrativataxa_de_aprovacaotaxa_de_reprovacaotaxa_de_abandonoetapa_de_ensino
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [municipio_id, ano, dependencia_administrativa, taxa_de_aprovacao, taxa_de_reprovacao, taxa_de_abandono, etapa_de_ensino]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-28 00:19:35,812 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:19:35,813 INFO sqlalchemy.engine.Engine SELECT \"Filtro\".id AS \"Filtro_id\", \"Filtro\".municipio_id AS \"Filtro_municipio_id\", \"Filtro\".etapa_de_ensino AS \"Filtro_etapa_de_ensino\", \"Filtro\".ano AS \"Filtro_ano\" \n", + "FROM \"Filtro\"\n", + "2024-08-28 00:19:35,814 INFO sqlalchemy.engine.Engine [cached since 0.6183s ago] {}\n", + "2024-08-28 00:19:36,115 INFO sqlalchemy.engine.Engine ROLLBACK\n", + "2024-08-28 00:19:36,266 INFO sqlalchemy.engine.Engine SELECT \"Municipio\".id AS \"Municipio_id\", \"Municipio\".nome AS \"Municipio_nome\", \"Municipio\".\"UF\" AS \"Municipio_UF\" \n", + "FROM \"Municipio\" \n", + "WHERE \"Municipio\".id = %(id_1)s \n", + " LIMIT %(param_1)s\n", + "2024-08-28 00:19:36,267 INFO sqlalchemy.engine.Engine [cached since 3.072s ago] {'id_1': 1, 'param_1': 1}\n", + "2024-08-28 00:19:36,426 INFO sqlalchemy.engine.Engine SELECT \"Filtro\".ano AS \"Filtro_ano\", \"Indicador\".dependencia_administrativa AS \"Indicador_dependencia_administrativa\", avg(\"Indicador\".taxa_de_aprovacao) AS taxa_de_aprovacao, avg(\"Indicador\".taxa_de_reprovacao) AS taxa_de_reprovacao, avg(\"Indicador\".taxa_de_abandono) AS taxa_de_abandono \n", + "FROM \"Filtro\" JOIN \"Indicador\" ON \"Filtro\".id = \"Indicador\".id_filtro \n", + "WHERE \"Filtro\".municipio_id != %(municipio_id_1)s AND \"Filtro\".etapa_de_ensino != %(etapa_de_ensino_1)s GROUP BY \"Filtro\".ano, \"Indicador\".dependencia_administrativa ORDER BY \"Filtro\".ano, \"Indicador\".dependencia_administrativa\n", + "2024-08-28 00:19:36,427 INFO sqlalchemy.engine.Engine [generated in 0.00070s] {'municipio_id_1': 1, 'etapa_de_ensino_1': 'Todos'}\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
anodependencia_administrativataxa_de_aprovacaotaxa_de_reprovacaotaxa_de_abandonoetapa_de_ensinomunicipio_id
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [ano, dependencia_administrativa, taxa_de_aprovacao, taxa_de_reprovacao, taxa_de_abandono, etapa_de_ensino, municipio_id]\n", + "Index: []" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-28 00:19:36,592 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-28 00:19:36,593 INFO sqlalchemy.engine.Engine SELECT \"Filtro\".id AS \"Filtro_id\", \"Filtro\".municipio_id AS \"Filtro_municipio_id\", \"Filtro\".etapa_de_ensino AS \"Filtro_etapa_de_ensino\", \"Filtro\".ano AS \"Filtro_ano\" \n", + "FROM \"Filtro\"\n", + "2024-08-28 00:19:36,594 INFO sqlalchemy.engine.Engine [cached since 1.398s ago] {}\n", + "2024-08-28 00:19:36,921 INFO sqlalchemy.engine.Engine ROLLBACK\n", + "2024-08-28 00:19:37,076 INFO sqlalchemy.engine.Engine ROLLBACK\n" + ] + } + ], + "source": [ + "insert_total2()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "WebScrapper", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/WebScrapper/DataETL/ETLIndicadorPostgres.py b/WebScrapper/DataETL/ETLIndicadorPostgres.py new file mode 100644 index 0000000..11899c6 --- /dev/null +++ b/WebScrapper/DataETL/ETLIndicadorPostgres.py @@ -0,0 +1,42 @@ +import os +from src.etl import ETL +from src.config import Config +from dotenv import dotenv_values + +env_path = os.path.join(os.path.dirname(__file__), '.env') +env = dotenv_values(env_path) +host = env.get("DATABASE_HOST") +port = env.get("DATABASE_PORT") +dbname = env.get("DATABASE_NAME") +username = env.get("DATABASE_USERNAME") +password = env.get("DATABASE_PASSWORD") + +script_dir = os.path.dirname(os.path.realpath(__file__)) +source_path = os.path.abspath(os.path.join(script_dir, "../indicators_data")) +all_indicators_file_path = [ + os.path.join(source_path, i) for i in os.listdir(source_path)] + + +for file_name_path in all_indicators_file_path: + # Configuration + config = Config( + extractor_type="IndicadorExcelExtractor", + loader_type="DerivedFromFilterToPostgresLoader", + transformers=["StandardizeIndicadorDataTransformer"], + extractor={ + "file_name_path": file_name_path + }, + loader={ + "connection_details": { + "host": f"{host}", + "port": f"{port}", + "database": f"{dbname}", + "user": f"{username}", + "password": f"{password}" + } + } + ) + + # etl process + etl_process = ETL(config=config) + etl_process.process() diff --git a/WebScrapper/DataETL/ETLMatriculaPostgres.py b/WebScrapper/DataETL/ETLMatriculaPostgres.py new file mode 100644 index 0000000..5ba8d54 --- /dev/null +++ b/WebScrapper/DataETL/ETLMatriculaPostgres.py @@ -0,0 +1,42 @@ +import os +from src.etl import ETL +from src.config import Config +from dotenv import dotenv_values + + +script_dir = os.path.dirname(os.path.realpath(__file__)) +source_path = os.path.abspath(os.path.join(script_dir, "../oracle_data")) +all_indicators_file_path = [ + os.path.join(source_path, i) for i in os.listdir(source_path)] + +env_path = os.path.join(os.path.dirname(__file__), '.env') +env = dotenv_values(env_path) +host = env.get("DATABASE_HOST") +port = env.get("DATABASE_PORT") +dbname = env.get("DATABASE_NAME") +username = env.get("DATABASE_USERNAME") +password = env.get("DATABASE_PASSWORD") + +for file_name_path in all_indicators_file_path: + # Configuration + config = Config( + extractor_type="IndicadorExcelExtractor", + loader_type="DerivedFromFilterToPostgresLoader", + transformers=["StandardizeMatriculaDataTransformer"], + extractor={ + "file_name_path": file_name_path + }, + loader={ + "connection_details": { + "host": f"{host}", + "port": f"{port}", + "database": f"{dbname}", + "user": f"{username}", + "password": f"{password}" + } + } + ) + + # etl process + etl_process = ETL(config=config) + etl_process.process() diff --git a/WebScrapper/DataETL/ETLMunicipioJSON.py b/WebScrapper/DataETL/ETLMunicipioJSON.py new file mode 100644 index 0000000..d7a3758 --- /dev/null +++ b/WebScrapper/DataETL/ETLMunicipioJSON.py @@ -0,0 +1,27 @@ +import os +from src.etl import ETL +from src.config import Config + + +script_dir = os.path.dirname(os.path.realpath(__file__)) +source_path = os.path.abspath(os.path.join(script_dir, "../indicators_data")) + +source_file = os.path.join(source_path, 'tx_rend_municipios_2023.xlsx') +dest_file = os.path.join(script_dir, 'municipio_id.py') + +# Configuration +config = Config( + extractor_type="MunicipioExcelExtractor", + loader_type="PandasToJSONMunicipioRefererenceLoader", + transformers=["StandardizeMunicipioDataTransformer"], + extractor={ + "file_name_path": source_file + }, + loader={ + "file_name_path": dest_file + } +) + +# etl process +etl_process = ETL(config=config) +etl_process.process() diff --git a/WebScrapper/DataETL/ETLMunicipioPostgres.py b/WebScrapper/DataETL/ETLMunicipioPostgres.py new file mode 100644 index 0000000..1289218 --- /dev/null +++ b/WebScrapper/DataETL/ETLMunicipioPostgres.py @@ -0,0 +1,40 @@ +import os +from src.etl import ETL +from src.config import Config +from dotenv import dotenv_values + + +script_dir = os.path.dirname(os.path.realpath(__file__)) +source_path = os.path.abspath(os.path.join(script_dir, "../indicators_data")) +source_file = os.path.join(source_path, 'tx_rend_municipios_2023.xlsx') + +env_path = os.path.join(os.path.dirname(__file__), '.env') +env = dotenv_values(env_path) +host = env.get("DATABASE_HOST") +port = env.get("DATABASE_PORT") +dbname = env.get("DATABASE_NAME") +username = env.get("DATABASE_USERNAME") +password = env.get("DATABASE_PASSWORD") + +# Configuration +config = Config( + extractor_type="MunicipioExcelExtractor", + loader_type="MunicipioToPostgresLoader", + transformers=["StandardizeMunicipioDataTransformer"], + extractor={ + "file_name_path": source_file + }, + loader={ + "connection_details": { + "host": f"{host}", + "port": f"{port}", + "database": f"{dbname}", + "user": f"{username}", + "password": f"{password}" + } + } +) + +# etl process +etl_process = ETL(config=config) +etl_process.process() diff --git a/WebScrapper/DataETL/MunicipioDebugger.ipynb b/WebScrapper/DataETL/MunicipioDebugger.ipynb new file mode 100644 index 0000000..eff5cad --- /dev/null +++ b/WebScrapper/DataETL/MunicipioDebugger.ipynb @@ -0,0 +1,315 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## This program extracts municipalities and their codes from Excel and inserts them into the municipalities table in the database" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import os\n", + "import json\n", + "from sqlalchemy import create_engine, MetaData\n", + "from dotenv import dotenv_values\n", + "\n", + "path = os.path.abspath(os.path.join(os.getcwd(), \"../indicators_data\"))\n", + "file = os.path.join(path, 'tx_rend_municipios_2022.xlsx')\n", + "\n", + "\n", + "metadata = MetaData()\n", + "\n", + "config = dotenv_values(\"./.env\")\n", + "username = config.get(\"DATABASE_USERNAME\")\n", + "password = config.get(\"DATABASE_PASSWORD\")\n", + "dbname = config.get(\"DATABASE_NAME\")\n", + "port = config.get(\"DATABASE_PORT\")\n", + "host = config.get(\"DATABASE_HOST\")\n", + "\n", + "engine = create_engine(f\"postgresql+psycopg2://{username}:{password}@{host}:{port}/{dbname}\", echo=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Extracts the `id`, `nome` and `UF` columns and filters for the municipality of MG" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
UFidnome
28354MG3100104Abadia dos Dourados
28365MG3100203Abaeté
28378MG3100302Abre Campo
28390MG3100401Acaiaca
28403MG3100500Açucena
............
37797MG3171808Virginópolis
37811MG3171907Virgolândia
37819MG3172004Visconde do Rio Branco
37833MG3172103Volta Grande
37844MG3172202Wenceslau Braz
\n", + "

853 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " UF id nome\n", + "28354 MG 3100104 Abadia dos Dourados\n", + "28365 MG 3100203 Abaeté\n", + "28378 MG 3100302 Abre Campo\n", + "28390 MG 3100401 Acaiaca\n", + "28403 MG 3100500 Açucena\n", + "... .. ... ...\n", + "37797 MG 3171808 Virginópolis\n", + "37811 MG 3171907 Virgolândia\n", + "37819 MG 3172004 Visconde do Rio Branco\n", + "37833 MG 3172103 Volta Grande\n", + "37844 MG 3172202 Wenceslau Braz\n", + "\n", + "[853 rows x 3 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df = pd.read_excel(file, skiprows=5, usecols=['UF', 'Código do Município', 'Nome do Município'])\n", + "df = df[df['UF'] == 'MG']\n", + "df = df.drop_duplicates()\n", + "df = df.rename(columns={\n", + " 'Código do Município':'id',\n", + " 'Nome do Município':'nome',\n", + "})\n", + "\n", + "display(df)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Converte dados dos id's dos municipios e nomes para dicionario e salva em um arquivo python" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'Abadia dos Dourados': 3100104, 'Abaeté': 3100203, 'Abre Campo': 3100302, 'Acaiaca': 3100401, 'Açucena': 3100500, 'Água Boa': 3100609, 'Água Comprida': 3100708, 'Aguanil': 3100807, 'Águas Formosas': 3100906, 'Águas Vermelhas': 3101003, 'Aimorés': 3101102, 'Aiuruoca': 3101201, 'Alagoa': 3101300, 'Albertina': 3101409, 'Além Paraíba': 3101508, 'Alfenas': 3101607, 'Alfredo Vasconcelos': 3101631, 'Almenara': 3101706, 'Alpercata': 3101805, 'Alpinópolis': 3101904, 'Alterosa': 3102001, 'Alto Caparaó': 3102050, 'Alto Rio Doce': 3102100, 'Alvarenga': 3102209, 'Alvinópolis': 3102308, 'Alvorada de Minas': 3102407, 'Amparo do Serra': 3102506, 'Andradas': 3102605, 'Cachoeira de Pajeú': 3102704, 'Andrelândia': 3102803, 'Angelândia': 3102852, 'Antônio Carlos': 3102902, 'Antônio Dias': 3103009, 'Antônio Prado de Minas': 3103108, 'Araçaí': 3103207, 'Aracitaba': 3103306, 'Araçuaí': 3103405, 'Araguari': 3103504, 'Arantina': 3103603, 'Araponga': 3103702, 'Araporã': 3103751, 'Arapuá': 3103801, 'Araújos': 3103900, 'Araxá': 3104007, 'Arceburgo': 3104106, 'Arcos': 3104205, 'Areado': 3104304, 'Argirita': 3104403, 'Aricanduva': 3104452, 'Arinos': 3104502, 'Astolfo Dutra': 3104601, 'Ataléia': 3104700, 'Augusto de Lima': 3104809, 'Baependi': 3104908, 'Baldim': 3105004, 'Bambuí': 3105103, 'Bandeira': 3105202, 'Bandeira do Sul': 3105301, 'Barão de Cocais': 3105400, 'Barão de Monte Alto': 3105509, 'Barbacena': 3105608, 'Barra Longa': 3105707, 'Barroso': 3105905, 'Bela Vista de Minas': 3106002, 'Belmiro Braga': 3106101, 'Belo Horizonte': 3106200, 'Belo Oriente': 3106309, 'Belo Vale': 3106408, 'Berilo': 3106507, 'Bertópolis': 3106606, 'Berizal': 3106655, 'Betim': 3106705, 'Bias Fortes': 3106804, 'Bicas': 3106903, 'Biquinhas': 3107000, 'Boa Esperança': 3107109, 'Bocaina de Minas': 3107208, 'Bocaiúva': 3107307, 'Bom Despacho': 3107406, 'Bom Jardim de Minas': 3107505, 'Bom Jesus da Penha': 3107604, 'Bom Jesus do Amparo': 3107703, 'Bom Jesus do Galho': 3107802, 'Bom Repouso': 3107901, 'Bom Sucesso': 3108008, 'Bonfim': 3108107, 'Bonfinópolis de Minas': 3108206, 'Bonito de Minas': 3108255, 'Borda da Mata': 3108305, 'Botelhos': 3108404, 'Botumirim': 3108503, 'Brasilândia de Minas': 3108552, 'Brasília de Minas': 3108602, 'Brás Pires': 3108701, 'Braúnas': 3108800, 'Brazópolis': 3108909, 'Brumadinho': 3109006, 'Bueno Brandão': 3109105, 'Buenópolis': 3109204, 'Bugre': 3109253, 'Buritis': 3109303, 'Buritizeiro': 3109402, 'Cabeceira Grande': 3109451, 'Cabo Verde': 3109501, 'Cachoeira da Prata': 3109600, 'Cachoeira de Minas': 3109709, 'Cachoeira Dourada': 3109808, 'Caetanópolis': 3109907, 'Caeté': 3110004, 'Caiana': 3110103, 'Cajuri': 3110202, 'Caldas': 3110301, 'Camacho': 3110400, 'Camanducaia': 3110509, 'Cambuí': 3110608, 'Cambuquira': 3110707, 'Campanário': 3110806, 'Campanha': 3110905, 'Campestre': 3111002, 'Campina Verde': 3111101, 'Campo Azul': 3111150, 'Campo Belo': 3111200, 'Campo do Meio': 3111309, 'Campo Florido': 3111408, 'Campos Altos': 3111507, 'Campos Gerais': 3111606, 'Canaã': 3111705, 'Canápolis': 3111804, 'Cana Verde': 3111903, 'Candeias': 3112000, 'Cantagalo': 3112059, 'Caparaó': 3112109, 'Capela Nova': 3112208, 'Capelinha': 3112307, 'Capetinga': 3112406, 'Capim Branco': 3112505, 'Capinópolis': 3112604, 'Capitão Andrade': 3112653, 'Capitão Enéas': 3112703, 'Capitólio': 3112802, 'Caputira': 3112901, 'Caraí': 3113008, 'Caranaíba': 3113107, 'Carandaí': 3113206, 'Carangola': 3113305, 'Caratinga': 3113404, 'Carbonita': 3113503, 'Careaçu': 3113602, 'Carlos Chagas': 3113701, 'Carmésia': 3113800, 'Carmo da Cachoeira': 3113909, 'Carmo da Mata': 3114006, 'Carmo de Minas': 3114105, 'Carmo do Cajuru': 3114204, 'Carmo do Paranaíba': 3114303, 'Carmo do Rio Claro': 3114402, 'Carmópolis de Minas': 3114501, 'Carneirinho': 3114550, 'Carrancas': 3114600, 'Carvalhópolis': 3114709, 'Carvalhos': 3114808, 'Casa Grande': 3114907, 'Cascalho Rico': 3115003, 'Cássia': 3115102, 'Conceição da Barra de Minas': 3115201, 'Cataguases': 3115300, 'Catas Altas': 3115359, 'Catas Altas da Noruega': 3115409, 'Catuji': 3115458, 'Catuti': 3115474, 'Caxambu': 3115508, 'Cedro do Abaeté': 3115607, 'Central de Minas': 3115706, 'Centralina': 3115805, 'Chácara': 3115904, 'Chalé': 3116001, 'Chapada do Norte': 3116100, 'Chapada Gaúcha': 3116159, 'Chiador': 3116209, 'Cipotânea': 3116308, 'Claraval': 3116407, 'Claro dos Poções': 3116506, 'Cláudio': 3116605, 'Coimbra': 3116704, 'Coluna': 3116803, 'Comendador Gomes': 3116902, 'Comercinho': 3117009, 'Conceição da Aparecida': 3117108, 'Conceição das Pedras': 3117207, 'Conceição das Alagoas': 3117306, 'Conceição de Ipanema': 3117405, 'Conceição do Mato Dentro': 3117504, 'Conceição do Pará': 3117603, 'Conceição do Rio Verde': 3117702, 'Conceição dos Ouros': 3117801, 'Cônego Marinho': 3117836, 'Confins': 3117876, 'Congonhal': 3117900, 'Congonhas': 3118007, 'Congonhas do Norte': 3118106, 'Conquista': 3118205, 'Conselheiro Lafaiete': 3118304, 'Conselheiro Pena': 3118403, 'Consolação': 3118502, 'Contagem': 3118601, 'Coqueiral': 3118700, 'Coração de Jesus': 3118809, 'Cordisburgo': 3118908, 'Cordislândia': 3119005, 'Corinto': 3119104, 'Coroaci': 3119203, 'Coromandel': 3119302, 'Coronel Fabriciano': 3119401, 'Coronel Murta': 3119500, 'Coronel Pacheco': 3119609, 'Coronel Xavier Chaves': 3119708, 'Córrego Danta': 3119807, 'Córrego do Bom Jesus': 3119906, 'Córrego Fundo': 3119955, 'Córrego Novo': 3120003, 'Couto de Magalhães de Minas': 3120102, 'Crisólita': 3120151, 'Cristais': 3120201, 'Cristália': 3120300, 'Cristiano Otoni': 3120409, 'Cristina': 3120508, 'Crucilândia': 3120607, 'Cruzeiro da Fortaleza': 3120706, 'Cruzília': 3120805, 'Cuparaque': 3120839, 'Curral de Dentro': 3120870, 'Curvelo': 3120904, 'Datas': 3121001, 'Delfim Moreira': 3121100, 'Delfinópolis': 3121209, 'Delta': 3121258, 'Descoberto': 3121308, 'Desterro de Entre Rios': 3121407, 'Desterro do Melo': 3121506, 'Diamantina': 3121605, 'Diogo de Vasconcelos': 3121704, 'Dionísio': 3121803, 'Divinésia': 3121902, 'Divino': 3122009, 'Divino das Laranjeiras': 3122108, 'Divinolândia de Minas': 3122207, 'Divinópolis': 3122306, 'Divisa Alegre': 3122355, 'Divisa Nova': 3122405, 'Divisópolis': 3122454, 'Dom Bosco': 3122470, 'Dom Cavati': 3122504, 'Dom Joaquim': 3122603, 'Dom Silvério': 3122702, 'Dom Viçoso': 3122801, 'Dona Euzébia': 3122900, 'Dores de Campos': 3123007, 'Dores de Guanhães': 3123106, 'Dores do Indaiá': 3123205, 'Dores do Turvo': 3123304, 'Doresópolis': 3123403, 'Douradoquara': 3123502, 'Durandé': 3123528, 'Elói Mendes': 3123601, 'Engenheiro Caldas': 3123700, 'Engenheiro Navarro': 3123809, 'Entre Folhas': 3123858, 'Entre Rios de Minas': 3123908, 'Ervália': 3124005, 'Esmeraldas': 3124104, 'Espera Feliz': 3124203, 'Espinosa': 3124302, 'Espírito Santo do Dourado': 3124401, 'Estiva': 3124500, 'Estrela Dalva': 3124609, 'Estrela do Indaiá': 3124708, 'Estrela do Sul': 3124807, 'Eugenópolis': 3124906, 'Ewbank da Câmara': 3125002, 'Extrema': 3125101, 'Fama': 3125200, 'Faria Lemos': 3125309, 'Felício dos Santos': 3125408, 'São Gonçalo do Rio Preto': 3125507, 'Felisburgo': 3125606, 'Felixlândia': 3125705, 'Fernandes Tourinho': 3125804, 'Ferros': 3125903, 'Fervedouro': 3125952, 'Florestal': 3126000, 'Formiga': 3126109, 'Formoso': 3126208, 'Fortaleza de Minas': 3126307, 'Fortuna de Minas': 3126406, 'Francisco Badaró': 3126505, 'Francisco Dumont': 3126604, 'Francisco Sá': 3126703, 'Franciscópolis': 3126752, 'Frei Gaspar': 3126802, 'Frei Inocêncio': 3126901, 'Frei Lagonegro': 3126950, 'Fronteira': 3127008, 'Fronteira dos Vales': 3127057, 'Fruta de Leite': 3127073, 'Frutal': 3127107, 'Funilândia': 3127206, 'Galiléia': 3127305, 'Gameleiras': 3127339, 'Glaucilândia': 3127354, 'Goiabeira': 3127370, 'Goianá': 3127388, 'Gonçalves': 3127404, 'Gonzaga': 3127503, 'Gouveia': 3127602, 'Governador Valadares': 3127701, 'Grão Mogol': 3127800, 'Grupiara': 3127909, 'Guanhães': 3128006, 'Guapé': 3128105, 'Guaraciaba': 3128204, 'Guaraciama': 3128253, 'Guaranésia': 3128303, 'Guarani': 3128402, 'Guarará': 3128501, 'Guarda-Mor': 3128600, 'Guaxupé': 3128709, 'Guidoval': 3128808, 'Guimarânia': 3128907, 'Guiricema': 3129004, 'Gurinhatã': 3129103, 'Heliodora': 3129202, 'Iapu': 3129301, 'Ibertioga': 3129400, 'Ibiá': 3129509, 'Ibiaí': 3129608, 'Ibiracatu': 3129657, 'Ibiraci': 3129707, 'Ibirité': 3129806, 'Ibitiúra de Minas': 3129905, 'Ibituruna': 3130002, 'Icaraí de Minas': 3130051, 'Igarapé': 3130101, 'Igaratinga': 3130200, 'Iguatama': 3130309, 'Ijaci': 3130408, 'Ilicínea': 3130507, 'Imbé de Minas': 3130556, 'Inconfidentes': 3130606, 'Indaiabira': 3130655, 'Indianópolis': 3130705, 'Ingaí': 3130804, 'Inhapim': 3130903, 'Inhaúma': 3131000, 'Inimutaba': 3131109, 'Ipaba': 3131158, 'Ipanema': 3131208, 'Ipatinga': 3131307, 'Ipiaçu': 3131406, 'Ipuiúna': 3131505, 'Iraí de Minas': 3131604, 'Itabira': 3131703, 'Itabirinha': 3131802, 'Itabirito': 3131901, 'Itacambira': 3132008, 'Itacarambi': 3132107, 'Itaguara': 3132206, 'Itaipé': 3132305, 'Itajubá': 3132404, 'Itamarandiba': 3132503, 'Itamarati de Minas': 3132602, 'Itambacuri': 3132701, 'Itambé do Mato Dentro': 3132800, 'Itamogi': 3132909, 'Itamonte': 3133006, 'Itanhandu': 3133105, 'Itanhomi': 3133204, 'Itaobim': 3133303, 'Itapagipe': 3133402, 'Itapecerica': 3133501, 'Itapeva': 3133600, 'Itatiaiuçu': 3133709, 'Itaú de Minas': 3133758, 'Itaúna': 3133808, 'Itaverava': 3133907, 'Itinga': 3134004, 'Itueta': 3134103, 'Ituiutaba': 3134202, 'Itumirim': 3134301, 'Iturama': 3134400, 'Itutinga': 3134509, 'Jaboticatubas': 3134608, 'Jacinto': 3134707, 'Jacuí': 3134806, 'Jacutinga': 3134905, 'Jaguaraçu': 3135001, 'Jaíba': 3135050, 'Jampruca': 3135076, 'Janaúba': 3135100, 'Januária': 3135209, 'Japaraíba': 3135308, 'Japonvar': 3135357, 'Jeceaba': 3135407, 'Jenipapo de Minas': 3135456, 'Jequeri': 3135506, 'Jequitaí': 3135605, 'Jequitibá': 3135704, 'Jequitinhonha': 3135803, 'Jesuânia': 3135902, 'Joaíma': 3136009, 'Joanésia': 3136108, 'João Monlevade': 3136207, 'João Pinheiro': 3136306, 'Joaquim Felício': 3136405, 'Jordânia': 3136504, 'José Gonçalves de Minas': 3136520, 'José Raydan': 3136553, 'Josenópolis': 3136579, 'Nova União': 3136603, 'Juatuba': 3136652, 'Juiz de Fora': 3136702, 'Juramento': 3136801, 'Juruaia': 3136900, 'Juvenília': 3136959, 'Ladainha': 3137007, 'Lagamar': 3137106, 'Lagoa da Prata': 3137205, 'Lagoa dos Patos': 3137304, 'Lagoa Dourada': 3137403, 'Lagoa Formosa': 3137502, 'Lagoa Grande': 3137536, 'Lagoa Santa': 3137601, 'Lajinha': 3137700, 'Lambari': 3137809, 'Lamim': 3137908, 'Laranjal': 3138005, 'Lassance': 3138104, 'Lavras': 3138203, 'Leandro Ferreira': 3138302, 'Leme do Prado': 3138351, 'Leopoldina': 3138401, 'Liberdade': 3138500, 'Lima Duarte': 3138609, 'Limeira do Oeste': 3138625, 'Lontra': 3138658, 'Luisburgo': 3138674, 'Luislândia': 3138682, 'Luminárias': 3138708, 'Luz': 3138807, 'Machacalis': 3138906, 'Machado': 3139003, 'Madre de Deus de Minas': 3139102, 'Malacacheta': 3139201, 'Mamonas': 3139250, 'Manga': 3139300, 'Manhuaçu': 3139409, 'Manhumirim': 3139508, 'Mantena': 3139607, 'Maravilhas': 3139706, 'Mar de Espanha': 3139805, 'Maria da Fé': 3139904, 'Mariana': 3140001, 'Marilac': 3140100, 'Mário Campos': 3140159, 'Maripá de Minas': 3140209, 'Marliéria': 3140308, 'Marmelópolis': 3140407, 'Martinho Campos': 3140506, 'Martins Soares': 3140530, 'Mata Verde': 3140555, 'Materlândia': 3140605, 'Mateus Leme': 3140704, 'Matias Barbosa': 3140803, 'Matias Cardoso': 3140852, 'Matipó': 3140902, 'Mato Verde': 3141009, 'Matozinhos': 3141108, 'Matutina': 3141207, 'Medeiros': 3141306, 'Medina': 3141405, 'Mendes Pimentel': 3141504, 'Mercês': 3141603, 'Mesquita': 3141702, 'Minas Novas': 3141801, 'Minduri': 3141900, 'Mirabela': 3142007, 'Miradouro': 3142106, 'Miraí': 3142205, 'Miravânia': 3142254, 'Moeda': 3142304, 'Moema': 3142403, 'Monjolos': 3142502, 'Monsenhor Paulo': 3142601, 'Montalvânia': 3142700, 'Monte Alegre de Minas': 3142809, 'Monte Azul': 3142908, 'Monte Belo': 3143005, 'Monte Carmelo': 3143104, 'Monte Formoso': 3143153, 'Monte Santo de Minas': 3143203, 'Montes Claros': 3143302, 'Monte Sião': 3143401, 'Montezuma': 3143450, 'Morada Nova de Minas': 3143500, 'Morro da Garça': 3143609, 'Morro do Pilar': 3143708, 'Munhoz': 3143807, 'Muriaé': 3143906, 'Mutum': 3144003, 'Muzambinho': 3144102, 'Nacip Raydan': 3144201, 'Nanuque': 3144300, 'Naque': 3144359, 'Natalândia': 3144375, 'Natércia': 3144409, 'Nazareno': 3144508, 'Nepomuceno': 3144607, 'Ninheira': 3144656, 'Nova Belém': 3144672, 'Nova Era': 3144706, 'Nova Lima': 3144805, 'Nova Módica': 3144904, 'Nova Ponte': 3145000, 'Nova Porteirinha': 3145059, 'Nova Resende': 3145109, 'Nova Serrana': 3145208, 'Novo Cruzeiro': 3145307, 'Novo Oriente de Minas': 3145356, 'Novorizonte': 3145372, 'Olaria': 3145406, \"Olhos-d'Água\": 3145455, 'Olímpio Noronha': 3145505, 'Oliveira': 3145604, 'Oliveira Fortes': 3145703, 'Onça de Pitangui': 3145802, 'Oratórios': 3145851, 'Orizânia': 3145877, 'Ouro Branco': 3145901, 'Ouro Fino': 3146008, 'Ouro Preto': 3146107, 'Ouro Verde de Minas': 3146206, 'Padre Carvalho': 3146255, 'Padre Paraíso': 3146305, 'Paineiras': 3146404, 'Pains': 3146503, 'Pai Pedro': 3146552, 'Paiva': 3146602, 'Palma': 3146701, 'Palmópolis': 3146750, 'Papagaios': 3146909, 'Paracatu': 3147006, 'Pará de Minas': 3147105, 'Paraguaçu': 3147204, 'Paraisópolis': 3147303, 'Paraopeba': 3147402, 'Passabém': 3147501, 'Passa Quatro': 3147600, 'Passa Tempo': 3147709, 'Passa Vinte': 3147808, 'Passos': 3147907, 'Patis': 3147956, 'Patos de Minas': 3148004, 'Patrocínio': 3148103, 'Patrocínio do Muriaé': 3148202, 'Paula Cândido': 3148301, 'Paulistas': 3148400, 'Pavão': 3148509, 'Peçanha': 3148608, 'Pedra Azul': 3148707, 'Pedra Bonita': 3148756, 'Pedra do Anta': 3148806, 'Pedra do Indaiá': 3148905, 'Pedra Dourada': 3149002, 'Pedralva': 3149101, 'Pedras de Maria da Cruz': 3149150, 'Pedrinópolis': 3149200, 'Pedro Leopoldo': 3149309, 'Pedro Teixeira': 3149408, 'Pequeri': 3149507, 'Pequi': 3149606, 'Perdigão': 3149705, 'Perdizes': 3149804, 'Perdões': 3149903, 'Periquito': 3149952, 'Pescador': 3150000, 'Piau': 3150109, 'Piedade de Caratinga': 3150158, 'Piedade de Ponte Nova': 3150208, 'Piedade do Rio Grande': 3150307, 'Piedade dos Gerais': 3150406, 'Pimenta': 3150505, \"Pingo-d'Água\": 3150539, 'Pintópolis': 3150570, 'Piracema': 3150604, 'Pirajuba': 3150703, 'Piranga': 3150802, 'Piranguçu': 3150901, 'Piranguinho': 3151008, 'Pirapetinga': 3151107, 'Pirapora': 3151206, 'Piraúba': 3151305, 'Pitangui': 3151404, 'Piumhi': 3151503, 'Planura': 3151602, 'Poço Fundo': 3151701, 'Poços de Caldas': 3151800, 'Pocrane': 3151909, 'Pompéu': 3152006, 'Ponte Nova': 3152105, 'Ponto Chique': 3152131, 'Ponto dos Volantes': 3152170, 'Porteirinha': 3152204, 'Porto Firme': 3152303, 'Poté': 3152402, 'Pouso Alegre': 3152501, 'Pouso Alto': 3152600, 'Prados': 3152709, 'Prata': 3152808, 'Pratápolis': 3152907, 'Pratinha': 3153004, 'Presidente Bernardes': 3153103, 'Presidente Juscelino': 3153202, 'Presidente Kubitschek': 3153301, 'Presidente Olegário': 3153400, 'Alto Jequitibá': 3153509, 'Prudente de Morais': 3153608, 'Quartel Geral': 3153707, 'Queluzito': 3153806, 'Raposos': 3153905, 'Raul Soares': 3154002, 'Recreio': 3154101, 'Reduto': 3154150, 'Resende Costa': 3154200, 'Resplendor': 3154309, 'Ressaquinha': 3154408, 'Riachinho': 3154457, 'Riacho dos Machados': 3154507, 'Ribeirão das Neves': 3154606, 'Ribeirão Vermelho': 3154705, 'Rio Acima': 3154804, 'Rio Casca': 3154903, 'Rio Doce': 3155009, 'Rio do Prado': 3155108, 'Rio Espera': 3155207, 'Rio Manso': 3155306, 'Rio Novo': 3155405, 'Rio Paranaíba': 3155504, 'Rio Pardo de Minas': 3155603, 'Rio Piracicaba': 3155702, 'Rio Pomba': 3155801, 'Rio Preto': 3155900, 'Rio Vermelho': 3156007, 'Ritápolis': 3156106, 'Rochedo de Minas': 3156205, 'Rodeiro': 3156304, 'Romaria': 3156403, 'Rosário da Limeira': 3156452, 'Rubelita': 3156502, 'Rubim': 3156601, 'Sabará': 3156700, 'Sabinópolis': 3156809, 'Sacramento': 3156908, 'Salinas': 3157005, 'Salto da Divisa': 3157104, 'Santa Bárbara': 3157203, 'Santa Bárbara do Leste': 3157252, 'Santa Bárbara do Monte Verde': 3157278, 'Santa Bárbara do Tugúrio': 3157302, 'Santa Cruz de Minas': 3157336, 'Santa Cruz de Salinas': 3157377, 'Santa Cruz do Escalvado': 3157401, 'Santa Efigênia de Minas': 3157500, 'Santa Fé de Minas': 3157609, 'Santa Helena de Minas': 3157658, 'Santa Juliana': 3157708, 'Santa Luzia': 3157807, 'Santa Margarida': 3157906, 'Santa Maria de Itabira': 3158003, 'Santa Maria do Salto': 3158102, 'Santa Maria do Suaçuí': 3158201, 'Santana da Vargem': 3158300, 'Santana de Cataguases': 3158409, 'Santana de Pirapama': 3158508, 'Santana do Deserto': 3158607, 'Santana do Garambéu': 3158706, 'Santana do Jacaré': 3158805, 'Santana do Manhuaçu': 3158904, 'Santana do Paraíso': 3158953, 'Santana do Riacho': 3159001, 'Santana dos Montes': 3159100, 'Santa Rita de Caldas': 3159209, 'Santa Rita de Jacutinga': 3159308, 'Santa Rita de Minas': 3159357, 'Santa Rita de Ibitipoca': 3159407, 'Santa Rita do Itueto': 3159506, 'Santa Rita do Sapucaí': 3159605, 'Santa Rosa da Serra': 3159704, 'Santa Vitória': 3159803, 'Santo Antônio do Amparo': 3159902, 'Santo Antônio do Aventureiro': 3160009, 'Santo Antônio do Grama': 3160108, 'Santo Antônio do Itambé': 3160207, 'Santo Antônio do Jacinto': 3160306, 'Santo Antônio do Monte': 3160405, 'Santo Antônio do Retiro': 3160454, 'Santo Antônio do Rio Abaixo': 3160504, 'Santo Hipólito': 3160603, 'Santos Dumont': 3160702, 'São Bento Abade': 3160801, 'São Brás do Suaçuí': 3160900, 'São Domingos das Dores': 3160959, 'São Domingos do Prata': 3161007, 'São Félix de Minas': 3161056, 'São Francisco': 3161106, 'São Francisco de Paula': 3161205, 'São Francisco de Sales': 3161304, 'São Francisco do Glória': 3161403, 'São Geraldo': 3161502, 'São Geraldo da Piedade': 3161601, 'São Geraldo do Baixio': 3161650, 'São Gonçalo do Abaeté': 3161700, 'São Gonçalo do Pará': 3161809, 'São Gonçalo do Rio Abaixo': 3161908, 'São Gonçalo do Sapucaí': 3162005, 'São Gotardo': 3162104, 'São João Batista do Glória': 3162203, 'São João da Lagoa': 3162252, 'São João da Mata': 3162302, 'São João da Ponte': 3162401, 'São João das Missões': 3162450, 'São João del Rei': 3162500, 'São João do Manhuaçu': 3162559, 'São João do Manteninha': 3162575, 'São João do Oriente': 3162609, 'São João do Pacuí': 3162658, 'São João do Paraíso': 3162708, 'São João Evangelista': 3162807, 'São João Nepomuceno': 3162906, 'São Joaquim de Bicas': 3162922, 'São José da Barra': 3162948, 'São José da Lapa': 3162955, 'São José da Safira': 3163003, 'São José da Varginha': 3163102, 'São José do Alegre': 3163201, 'São José do Divino': 3163300, 'São José do Goiabal': 3163409, 'São José do Jacuri': 3163508, 'São José do Mantimento': 3163607, 'São Lourenço': 3163706, 'São Miguel do Anta': 3163805, 'São Pedro da União': 3163904, 'São Pedro dos Ferros': 3164001, 'São Pedro do Suaçuí': 3164100, 'São Romão': 3164209, 'São Roque de Minas': 3164308, 'São Sebastião da Bela Vista': 3164407, 'São Sebastião da Vargem Alegre': 3164431, 'São Sebastião do Anta': 3164472, 'São Sebastião do Maranhão': 3164506, 'São Sebastião do Oeste': 3164605, 'São Sebastião do Paraíso': 3164704, 'São Sebastião do Rio Preto': 3164803, 'São Sebastião do Rio Verde': 3164902, 'São Tiago': 3165008, 'São Tomás de Aquino': 3165107, 'São Tomé das Letras': 3165206, 'São Vicente de Minas': 3165305, 'Sapucaí-Mirim': 3165404, 'Sardoá': 3165503, 'Sarzedo': 3165537, 'Setubinha': 3165552, 'Sem-Peixe': 3165560, 'Senador Amaral': 3165578, 'Senador Cortes': 3165602, 'Senador Firmino': 3165701, 'Senador José Bento': 3165800, 'Senador Modestino Gonçalves': 3165909, 'Senhora de Oliveira': 3166006, 'Senhora do Porto': 3166105, 'Senhora dos Remédios': 3166204, 'Sericita': 3166303, 'Seritinga': 3166402, 'Serra Azul de Minas': 3166501, 'Serra da Saudade': 3166600, 'Serra dos Aimorés': 3166709, 'Serra do Salitre': 3166808, 'Serrania': 3166907, 'Serranópolis de Minas': 3166956, 'Serranos': 3167004, 'Serro': 3167103, 'Sete Lagoas': 3167202, 'Silveirânia': 3167301, 'Silvianópolis': 3167400, 'Simão Pereira': 3167509, 'Simonésia': 3167608, 'Sobrália': 3167707, 'Soledade de Minas': 3167806, 'Tabuleiro': 3167905, 'Taiobeiras': 3168002, 'Taparuba': 3168051, 'Tapira': 3168101, 'Tapiraí': 3168200, 'Taquaraçu de Minas': 3168309, 'Tarumirim': 3168408, 'Teixeiras': 3168507, 'Teófilo Otoni': 3168606, 'Timóteo': 3168705, 'Tiradentes': 3168804, 'Tiros': 3168903, 'Tocantins': 3169000, 'Tocos do Moji': 3169059, 'Toledo': 3169109, 'Tombos': 3169208, 'Três Corações': 3169307, 'Três Marias': 3169356, 'Três Pontas': 3169406, 'Tumiritinga': 3169505, 'Tupaciguara': 3169604, 'Turmalina': 3169703, 'Turvolândia': 3169802, 'Ubá': 3169901, 'Ubaí': 3170008, 'Ubaporanga': 3170057, 'Uberaba': 3170107, 'Uberlândia': 3170206, 'Umburatiba': 3170305, 'Unaí': 3170404, 'União de Minas': 3170438, 'Uruana de Minas': 3170479, 'Urucânia': 3170503, 'Urucuia': 3170529, 'Vargem Alegre': 3170578, 'Vargem Bonita': 3170602, 'Vargem Grande do Rio Pardo': 3170651, 'Varginha': 3170701, 'Varjão de Minas': 3170750, 'Várzea da Palma': 3170800, 'Varzelândia': 3170909, 'Vazante': 3171006, 'Verdelândia': 3171030, 'Veredinha': 3171071, 'Veríssimo': 3171105, 'Vermelho Novo': 3171154, 'Vespasiano': 3171204, 'Viçosa': 3171303, 'Vieiras': 3171402, 'Mathias Lobato': 3171501, 'Virgem da Lapa': 3171600, 'Virgínia': 3171709, 'Virginópolis': 3171808, 'Virgolândia': 3171907, 'Visconde do Rio Branco': 3172004, 'Volta Grande': 3172103, 'Wenceslau Braz': 3172202, 'Dona Eusébia': 3122900}\n", + "\n", + "Dicionário salvo em 'municipio_id.py'\n" + ] + } + ], + "source": [ + "df['id'] = df['id'].astype(int)\n", + "\"\"\" municipios_map = dict(zip(df['nome'], df['id']))\n", + "municipios_map['Dona Eusébia'] = 3122900 # esse municipio possui duas formas de se escrever\n", + "municipios_map['São Thomé das Letras'] = 3165206\n", + "municipios_map[\"Pingo d'Água\"] = 3150539\n", + "print(municipios_map)\n", + "\n", + "file_name = 'municipio_id.py'\n", + "content = f'municipio_map = {json.dumps(municipios_map, indent=4, ensure_ascii=False)}'\n", + "\n", + "with open(file_name, 'w') as file:\n", + " file.write(content)\n", + "\n", + "print(f\"\\nDicionário salvo em '{file_name}'\") \"\"\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "object\n", + "id\n", + " 853\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "#print(type(df['id'].iloc[5]))\n", + "print(df['id'].dtype)\n", + "print(df['id'].apply(type).value_counts())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Envia dados para o banco de dados" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-08-24 16:40:22,043 INFO sqlalchemy.engine.Engine select pg_catalog.version()\n", + "2024-08-24 16:40:22,044 INFO sqlalchemy.engine.Engine [raw sql] {}\n", + "2024-08-24 16:40:22,338 INFO sqlalchemy.engine.Engine select current_schema()\n", + "2024-08-24 16:40:22,340 INFO sqlalchemy.engine.Engine [raw sql] {}\n", + "2024-08-24 16:40:22,634 INFO sqlalchemy.engine.Engine show standard_conforming_strings\n", + "2024-08-24 16:40:22,635 INFO sqlalchemy.engine.Engine [raw sql] {}\n", + "2024-08-24 16:40:23,030 INFO sqlalchemy.engine.Engine BEGIN (implicit)\n", + "2024-08-24 16:40:23,099 INFO sqlalchemy.engine.Engine SELECT pg_catalog.pg_class.relname \n", + "FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace \n", + "WHERE pg_catalog.pg_class.relname = %(table_name)s AND pg_catalog.pg_class.relkind = ANY (ARRAY[%(param_1)s, %(param_2)s, %(param_3)s, %(param_4)s, %(param_5)s]) AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != %(nspname_1)s\n", + "2024-08-24 16:40:23,099 INFO sqlalchemy.engine.Engine [generated in 0.00078s] {'table_name': 'Municipio', 'param_1': 'r', 'param_2': 'p', 'param_3': 'f', 'param_4': 'v', 'param_5': 'm', 'nspname_1': 'pg_catalog'}\n", + "2024-08-24 16:40:23,549 INFO sqlalchemy.engine.Engine INSERT INTO \"Municipio\" (\"UF\", id, nome) VALUES (%(UF__0)s, %(id__0)s, %(nome__0)s), (%(UF__1)s, %(id__1)s, %(nome__1)s), (%(UF__2)s, %(id__2)s, %(nome__2)s), (%(UF__3)s, %(id__3)s, %(nome__3)s), (%(UF__4)s, %(id__4)s, %(nome__4)s), (%(UF__5)s, %(id_ ... 36045 characters truncated ... %(nome__850)s), (%(UF__851)s, %(id__851)s, %(nome__851)s), (%(UF__852)s, %(id__852)s, %(nome__852)s)\n", + "2024-08-24 16:40:23,550 INFO sqlalchemy.engine.Engine [generated in 0.00211s (insertmanyvalues) 1/1 (unordered)] {'nome__0': 'Abadia dos Dourados', 'UF__0': 'MG', 'id__0': 3100104, 'nome__1': 'Abaeté', 'UF__1': 'MG', 'id__1': 3100203, 'nome__2': 'Abre Campo', 'UF__2': 'MG', 'id__2': 3100302, 'nome__3': 'Acaiaca', 'UF__3': 'MG', 'id__3': 3100401, 'nome__4': 'Açucena', 'UF__4': 'MG', 'id__4': 3100500, 'nome__5': 'Água Boa', 'UF__5': 'MG', 'id__5': 3100609, 'nome__6': 'Água Comprida', 'UF__6': 'MG', 'id__6': 3100708, 'nome__7': 'Aguanil', 'UF__7': 'MG', 'id__7': 3100807, 'nome__8': 'Águas Formosas', 'UF__8': 'MG', 'id__8': 3100906, 'nome__9': 'Águas Vermelhas', 'UF__9': 'MG', 'id__9': 3101003, 'nome__10': 'Aimorés', 'UF__10': 'MG', 'id__10': 3101102, 'nome__11': 'Aiuruoca', 'UF__11': 'MG', 'id__11': 3101201, 'nome__12': 'Alagoa', 'UF__12': 'MG', 'id__12': 3101300, 'nome__13': 'Albertina', 'UF__13': 'MG', 'id__13': 3101409, 'nome__14': 'Além Paraíba', 'UF__14': 'MG', 'id__14': 3101508, 'nome__15': 'Alfenas', 'UF__15': 'MG', 'id__15': 3101607, 'nome__16': 'Alfredo Vasconcelos', 'UF__16': 'MG' ... 2459 parameters truncated ... 'UF__836': 'MG', 'id__836': 3170909, 'nome__837': 'Vazante', 'UF__837': 'MG', 'id__837': 3171006, 'nome__838': 'Verdelândia', 'UF__838': 'MG', 'id__838': 3171030, 'nome__839': 'Veredinha', 'UF__839': 'MG', 'id__839': 3171071, 'nome__840': 'Veríssimo', 'UF__840': 'MG', 'id__840': 3171105, 'nome__841': 'Vermelho Novo', 'UF__841': 'MG', 'id__841': 3171154, 'nome__842': 'Vespasiano', 'UF__842': 'MG', 'id__842': 3171204, 'nome__843': 'Viçosa', 'UF__843': 'MG', 'id__843': 3171303, 'nome__844': 'Vieiras', 'UF__844': 'MG', 'id__844': 3171402, 'nome__845': 'Mathias Lobato', 'UF__845': 'MG', 'id__845': 3171501, 'nome__846': 'Virgem da Lapa', 'UF__846': 'MG', 'id__846': 3171600, 'nome__847': 'Virgínia', 'UF__847': 'MG', 'id__847': 3171709, 'nome__848': 'Virginópolis', 'UF__848': 'MG', 'id__848': 3171808, 'nome__849': 'Virgolândia', 'UF__849': 'MG', 'id__849': 3171907, 'nome__850': 'Visconde do Rio Branco', 'UF__850': 'MG', 'id__850': 3172004, 'nome__851': 'Volta Grande', 'UF__851': 'MG', 'id__851': 3172103, 'nome__852': 'Wenceslau Braz', 'UF__852': 'MG', 'id__852': 3172202}\n", + "2024-08-24 16:40:23,954 INFO sqlalchemy.engine.Engine SELECT pg_catalog.pg_class.relname \n", + "FROM pg_catalog.pg_class JOIN pg_catalog.pg_namespace ON pg_catalog.pg_namespace.oid = pg_catalog.pg_class.relnamespace \n", + "WHERE pg_catalog.pg_class.relkind = ANY (ARRAY[%(param_1)s, %(param_2)s]) AND pg_catalog.pg_class.relpersistence != %(relpersistence_1)s AND pg_catalog.pg_table_is_visible(pg_catalog.pg_class.oid) AND pg_catalog.pg_namespace.nspname != %(nspname_1)s\n", + "2024-08-24 16:40:23,955 INFO sqlalchemy.engine.Engine [generated in 0.00088s] {'param_1': 'r', 'param_2': 'p', 'relpersistence_1': 't', 'nspname_1': 'pg_catalog'}\n", + "2024-08-24 16:40:24,105 INFO sqlalchemy.engine.Engine COMMIT\n" + ] + }, + { + "data": { + "text/plain": [ + "853" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.to_sql('Municipio', con=engine, if_exists='append', index=False)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "WebScrapper", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/WebScrapper/DataETL/main.py b/WebScrapper/DataETL/main.py new file mode 100644 index 0000000..3c195be --- /dev/null +++ b/WebScrapper/DataETL/main.py @@ -0,0 +1,16 @@ +import subprocess + + +def run_scripts(): + scripts = [ + 'ETLMunicipioJSON.py', + 'ETLMunicipioPostgres.py', + 'ETLIndicadorPostgres.py' + ] + + for script in scripts: + subprocess.run(['python', script]) + + +if __name__ == "__main__": + run_scripts() diff --git a/WebScrapper/DataETL/models/__init__.py b/WebScrapper/DataETL/models/__init__.py new file mode 100644 index 0000000..7e7a11d --- /dev/null +++ b/WebScrapper/DataETL/models/__init__.py @@ -0,0 +1,6 @@ +from .municipio import Municipio +from .filtro import Filtro +from .matricula import Matricula +from .indicador import Indicador + +__all__ = ['Municipio', 'Filtro', 'Matricula', 'Indicador'] diff --git a/WebScrapper/DataETL/models/base.py b/WebScrapper/DataETL/models/base.py new file mode 100644 index 0000000..21145b0 --- /dev/null +++ b/WebScrapper/DataETL/models/base.py @@ -0,0 +1,5 @@ +from sqlalchemy.orm import DeclarativeBase + + +class Base(DeclarativeBase): + ... diff --git a/WebScrapper/DataETL/models/filtro.py b/WebScrapper/DataETL/models/filtro.py new file mode 100644 index 0000000..e305c5e --- /dev/null +++ b/WebScrapper/DataETL/models/filtro.py @@ -0,0 +1,15 @@ +from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint +from .base import Base + + +class Filtro(Base): + __tablename__ = 'Filtro' + + id = Column(Integer, primary_key=True, autoincrement=True) + municipio_id = Column(Integer, ForeignKey( + 'Municipio.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) + etapa_de_ensino = Column(String(5), nullable=False) + ano = Column(Integer, nullable=False) + + __table_args__ = (UniqueConstraint( + 'municipio_id', 'etapa_de_ensino', 'ano', name='unique_municipio_etapa_ano'),) diff --git a/WebScrapper/DataETL/models/indicador.py b/WebScrapper/DataETL/models/indicador.py new file mode 100644 index 0000000..2727060 --- /dev/null +++ b/WebScrapper/DataETL/models/indicador.py @@ -0,0 +1,12 @@ +from sqlalchemy import Column, Integer, Float, String, ForeignKey +from .base import Base + + +class Indicador(Base): + __tablename__ = 'Indicador' + id = Column(Integer, primary_key=True, autoincrement=True) + id_filtro = Column(Integer, ForeignKey('Filtro.id'), nullable=False) + dependencia_administrativa = Column(String(20), nullable=True) + taxa_de_aprovacao = Column(Float, nullable=True) + taxa_de_reprovacao = Column(Float, nullable=True) + taxa_de_abandono = Column(Float, nullable=True) diff --git a/WebScrapper/DataETL/models/matricula.py b/WebScrapper/DataETL/models/matricula.py new file mode 100644 index 0000000..cbb2e03 --- /dev/null +++ b/WebScrapper/DataETL/models/matricula.py @@ -0,0 +1,11 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from .base import Base + + +class Matricula(Base): + __tablename__ = 'Matricula' + id = Column(Integer, primary_key=True, autoincrement=True) + id_filtro = Column(Integer, ForeignKey('Filtro.id'), nullable=False) + cor_raca = Column(String(20), nullable=True) + dependencia_administrativa = Column(String(20), nullable=True) + quantidade = Column(Integer, nullable=True) diff --git a/WebScrapper/DataETL/models/municipio.py b/WebScrapper/DataETL/models/municipio.py new file mode 100644 index 0000000..911679b --- /dev/null +++ b/WebScrapper/DataETL/models/municipio.py @@ -0,0 +1,9 @@ +from sqlalchemy import Column, Integer, String +from .base import Base + + +class Municipio(Base): + __tablename__ = 'Municipio' + id = Column(Integer, primary_key=True, autoincrement=True, default=None) + nome = Column(String, nullable=False, unique=True) + UF = Column(String, nullable=False) diff --git a/WebScrapper/DataETL/municipio_id.py b/WebScrapper/DataETL/municipio_id.py new file mode 100644 index 0000000..2b042de --- /dev/null +++ b/WebScrapper/DataETL/municipio_id.py @@ -0,0 +1,858 @@ +municipio_map = { + "Abadia dos Dourados": 3100104, + "Abaeté": 3100203, + "Abre Campo": 3100302, + "Acaiaca": 3100401, + "Açucena": 3100500, + "Água Boa": 3100609, + "Água Comprida": 3100708, + "Aguanil": 3100807, + "Águas Formosas": 3100906, + "Águas Vermelhas": 3101003, + "Aimorés": 3101102, + "Aiuruoca": 3101201, + "Alagoa": 3101300, + "Albertina": 3101409, + "Além Paraíba": 3101508, + "Alfenas": 3101607, + "Alfredo Vasconcelos": 3101631, + "Almenara": 3101706, + "Alpercata": 3101805, + "Alpinópolis": 3101904, + "Alterosa": 3102001, + "Alto Caparaó": 3102050, + "Alto Rio Doce": 3102100, + "Alvarenga": 3102209, + "Alvinópolis": 3102308, + "Alvorada de Minas": 3102407, + "Amparo do Serra": 3102506, + "Andradas": 3102605, + "Cachoeira de Pajeú": 3102704, + "Andrelândia": 3102803, + "Angelândia": 3102852, + "Antônio Carlos": 3102902, + "Antônio Dias": 3103009, + "Antônio Prado de Minas": 3103108, + "Araçaí": 3103207, + "Aracitaba": 3103306, + "Araçuaí": 3103405, + "Araguari": 3103504, + "Arantina": 3103603, + "Araponga": 3103702, + "Araporã": 3103751, + "Arapuá": 3103801, + "Araújos": 3103900, + "Araxá": 3104007, + "Arceburgo": 3104106, + "Arcos": 3104205, + "Areado": 3104304, + "Argirita": 3104403, + "Aricanduva": 3104452, + "Arinos": 3104502, + "Astolfo Dutra": 3104601, + "Ataléia": 3104700, + "Augusto de Lima": 3104809, + "Baependi": 3104908, + "Baldim": 3105004, + "Bambuí": 3105103, + "Bandeira": 3105202, + "Bandeira do Sul": 3105301, + "Barão de Cocais": 3105400, + "Barão de Monte Alto": 3105509, + "Barbacena": 3105608, + "Barra Longa": 3105707, + "Barroso": 3105905, + "Bela Vista de Minas": 3106002, + "Belmiro Braga": 3106101, + "Belo Horizonte": 3106200, + "Belo Oriente": 3106309, + "Belo Vale": 3106408, + "Berilo": 3106507, + "Bertópolis": 3106606, + "Berizal": 3106655, + "Betim": 3106705, + "Bias Fortes": 3106804, + "Bicas": 3106903, + "Biquinhas": 3107000, + "Boa Esperança": 3107109, + "Bocaina de Minas": 3107208, + "Bocaiúva": 3107307, + "Bom Despacho": 3107406, + "Bom Jardim de Minas": 3107505, + "Bom Jesus da Penha": 3107604, + "Bom Jesus do Amparo": 3107703, + "Bom Jesus do Galho": 3107802, + "Bom Repouso": 3107901, + "Bom Sucesso": 3108008, + "Bonfim": 3108107, + "Bonfinópolis de Minas": 3108206, + "Bonito de Minas": 3108255, + "Borda da Mata": 3108305, + "Botelhos": 3108404, + "Botumirim": 3108503, + "Brasilândia de Minas": 3108552, + "Brasília de Minas": 3108602, + "Brás Pires": 3108701, + "Braúnas": 3108800, + "Brazópolis": 3108909, + "Brumadinho": 3109006, + "Bueno Brandão": 3109105, + "Buenópolis": 3109204, + "Bugre": 3109253, + "Buritis": 3109303, + "Buritizeiro": 3109402, + "Cabeceira Grande": 3109451, + "Cabo Verde": 3109501, + "Cachoeira da Prata": 3109600, + "Cachoeira de Minas": 3109709, + "Cachoeira Dourada": 3109808, + "Caetanópolis": 3109907, + "Caeté": 3110004, + "Caiana": 3110103, + "Cajuri": 3110202, + "Caldas": 3110301, + "Camacho": 3110400, + "Camanducaia": 3110509, + "Cambuí": 3110608, + "Cambuquira": 3110707, + "Campanário": 3110806, + "Campanha": 3110905, + "Campestre": 3111002, + "Campina Verde": 3111101, + "Campo Azul": 3111150, + "Campo Belo": 3111200, + "Campo do Meio": 3111309, + "Campo Florido": 3111408, + "Campos Altos": 3111507, + "Campos Gerais": 3111606, + "Canaã": 3111705, + "Canápolis": 3111804, + "Cana Verde": 3111903, + "Candeias": 3112000, + "Cantagalo": 3112059, + "Caparaó": 3112109, + "Capela Nova": 3112208, + "Capelinha": 3112307, + "Capetinga": 3112406, + "Capim Branco": 3112505, + "Capinópolis": 3112604, + "Capitão Andrade": 3112653, + "Capitão Enéas": 3112703, + "Capitólio": 3112802, + "Caputira": 3112901, + "Caraí": 3113008, + "Caranaíba": 3113107, + "Carandaí": 3113206, + "Carangola": 3113305, + "Caratinga": 3113404, + "Carbonita": 3113503, + "Careaçu": 3113602, + "Carlos Chagas": 3113701, + "Carmésia": 3113800, + "Carmo da Cachoeira": 3113909, + "Carmo da Mata": 3114006, + "Carmo de Minas": 3114105, + "Carmo do Cajuru": 3114204, + "Carmo do Paranaíba": 3114303, + "Carmo do Rio Claro": 3114402, + "Carmópolis de Minas": 3114501, + "Carneirinho": 3114550, + "Carrancas": 3114600, + "Carvalhópolis": 3114709, + "Carvalhos": 3114808, + "Casa Grande": 3114907, + "Cascalho Rico": 3115003, + "Cássia": 3115102, + "Conceição da Barra de Minas": 3115201, + "Cataguases": 3115300, + "Catas Altas": 3115359, + "Catas Altas da Noruega": 3115409, + "Catuji": 3115458, + "Catuti": 3115474, + "Caxambu": 3115508, + "Cedro do Abaeté": 3115607, + "Central de Minas": 3115706, + "Centralina": 3115805, + "Chácara": 3115904, + "Chalé": 3116001, + "Chapada do Norte": 3116100, + "Chapada Gaúcha": 3116159, + "Chiador": 3116209, + "Cipotânea": 3116308, + "Claraval": 3116407, + "Claro dos Poções": 3116506, + "Cláudio": 3116605, + "Coimbra": 3116704, + "Coluna": 3116803, + "Comendador Gomes": 3116902, + "Comercinho": 3117009, + "Conceição da Aparecida": 3117108, + "Conceição das Pedras": 3117207, + "Conceição das Alagoas": 3117306, + "Conceição de Ipanema": 3117405, + "Conceição do Mato Dentro": 3117504, + "Conceição do Pará": 3117603, + "Conceição do Rio Verde": 3117702, + "Conceição dos Ouros": 3117801, + "Cônego Marinho": 3117836, + "Confins": 3117876, + "Congonhal": 3117900, + "Congonhas": 3118007, + "Congonhas do Norte": 3118106, + "Conquista": 3118205, + "Conselheiro Lafaiete": 3118304, + "Conselheiro Pena": 3118403, + "Consolação": 3118502, + "Contagem": 3118601, + "Coqueiral": 3118700, + "Coração de Jesus": 3118809, + "Cordisburgo": 3118908, + "Cordislândia": 3119005, + "Corinto": 3119104, + "Coroaci": 3119203, + "Coromandel": 3119302, + "Coronel Fabriciano": 3119401, + "Coronel Murta": 3119500, + "Coronel Pacheco": 3119609, + "Coronel Xavier Chaves": 3119708, + "Córrego Danta": 3119807, + "Córrego do Bom Jesus": 3119906, + "Córrego Fundo": 3119955, + "Córrego Novo": 3120003, + "Couto de Magalhães de Minas": 3120102, + "Crisólita": 3120151, + "Cristais": 3120201, + "Cristália": 3120300, + "Cristiano Otoni": 3120409, + "Cristina": 3120508, + "Crucilândia": 3120607, + "Cruzeiro da Fortaleza": 3120706, + "Cruzília": 3120805, + "Cuparaque": 3120839, + "Curral de Dentro": 3120870, + "Curvelo": 3120904, + "Datas": 3121001, + "Delfim Moreira": 3121100, + "Delfinópolis": 3121209, + "Delta": 3121258, + "Descoberto": 3121308, + "Desterro de Entre Rios": 3121407, + "Desterro do Melo": 3121506, + "Diamantina": 3121605, + "Diogo de Vasconcelos": 3121704, + "Dionísio": 3121803, + "Divinésia": 3121902, + "Divino": 3122009, + "Divino das Laranjeiras": 3122108, + "Divinolândia de Minas": 3122207, + "Divinópolis": 3122306, + "Divisa Alegre": 3122355, + "Divisa Nova": 3122405, + "Divisópolis": 3122454, + "Dom Bosco": 3122470, + "Dom Cavati": 3122504, + "Dom Joaquim": 3122603, + "Dom Silvério": 3122702, + "Dom Viçoso": 3122801, + "Dona Euzébia": 3122900, + "Dores de Campos": 3123007, + "Dores de Guanhães": 3123106, + "Dores do Indaiá": 3123205, + "Dores do Turvo": 3123304, + "Doresópolis": 3123403, + "Douradoquara": 3123502, + "Durandé": 3123528, + "Elói Mendes": 3123601, + "Engenheiro Caldas": 3123700, + "Engenheiro Navarro": 3123809, + "Entre Folhas": 3123858, + "Entre Rios de Minas": 3123908, + "Ervália": 3124005, + "Esmeraldas": 3124104, + "Espera Feliz": 3124203, + "Espinosa": 3124302, + "Espírito Santo do Dourado": 3124401, + "Estiva": 3124500, + "Estrela Dalva": 3124609, + "Estrela do Indaiá": 3124708, + "Estrela do Sul": 3124807, + "Eugenópolis": 3124906, + "Ewbank da Câmara": 3125002, + "Extrema": 3125101, + "Fama": 3125200, + "Faria Lemos": 3125309, + "Felício dos Santos": 3125408, + "São Gonçalo do Rio Preto": 3125507, + "Felisburgo": 3125606, + "Felixlândia": 3125705, + "Fernandes Tourinho": 3125804, + "Ferros": 3125903, + "Fervedouro": 3125952, + "Florestal": 3126000, + "Formiga": 3126109, + "Formoso": 3126208, + "Fortaleza de Minas": 3126307, + "Fortuna de Minas": 3126406, + "Francisco Badaró": 3126505, + "Francisco Dumont": 3126604, + "Francisco Sá": 3126703, + "Franciscópolis": 3126752, + "Frei Gaspar": 3126802, + "Frei Inocêncio": 3126901, + "Frei Lagonegro": 3126950, + "Fronteira": 3127008, + "Fronteira dos Vales": 3127057, + "Fruta de Leite": 3127073, + "Frutal": 3127107, + "Funilândia": 3127206, + "Galiléia": 3127305, + "Gameleiras": 3127339, + "Glaucilândia": 3127354, + "Goiabeira": 3127370, + "Goianá": 3127388, + "Gonçalves": 3127404, + "Gonzaga": 3127503, + "Gouveia": 3127602, + "Governador Valadares": 3127701, + "Grão Mogol": 3127800, + "Grupiara": 3127909, + "Guanhães": 3128006, + "Guapé": 3128105, + "Guaraciaba": 3128204, + "Guaraciama": 3128253, + "Guaranésia": 3128303, + "Guarani": 3128402, + "Guarará": 3128501, + "Guarda-Mor": 3128600, + "Guaxupé": 3128709, + "Guidoval": 3128808, + "Guimarânia": 3128907, + "Guiricema": 3129004, + "Gurinhatã": 3129103, + "Heliodora": 3129202, + "Iapu": 3129301, + "Ibertioga": 3129400, + "Ibiá": 3129509, + "Ibiaí": 3129608, + "Ibiracatu": 3129657, + "Ibiraci": 3129707, + "Ibirité": 3129806, + "Ibitiúra de Minas": 3129905, + "Ibituruna": 3130002, + "Icaraí de Minas": 3130051, + "Igarapé": 3130101, + "Igaratinga": 3130200, + "Iguatama": 3130309, + "Ijaci": 3130408, + "Ilicínea": 3130507, + "Imbé de Minas": 3130556, + "Inconfidentes": 3130606, + "Indaiabira": 3130655, + "Indianópolis": 3130705, + "Ingaí": 3130804, + "Inhapim": 3130903, + "Inhaúma": 3131000, + "Inimutaba": 3131109, + "Ipaba": 3131158, + "Ipanema": 3131208, + "Ipatinga": 3131307, + "Ipiaçu": 3131406, + "Ipuiúna": 3131505, + "Iraí de Minas": 3131604, + "Itabira": 3131703, + "Itabirinha": 3131802, + "Itabirito": 3131901, + "Itacambira": 3132008, + "Itacarambi": 3132107, + "Itaguara": 3132206, + "Itaipé": 3132305, + "Itajubá": 3132404, + "Itamarandiba": 3132503, + "Itamarati de Minas": 3132602, + "Itambacuri": 3132701, + "Itambé do Mato Dentro": 3132800, + "Itamogi": 3132909, + "Itamonte": 3133006, + "Itanhandu": 3133105, + "Itanhomi": 3133204, + "Itaobim": 3133303, + "Itapagipe": 3133402, + "Itapecerica": 3133501, + "Itapeva": 3133600, + "Itatiaiuçu": 3133709, + "Itaú de Minas": 3133758, + "Itaúna": 3133808, + "Itaverava": 3133907, + "Itinga": 3134004, + "Itueta": 3134103, + "Ituiutaba": 3134202, + "Itumirim": 3134301, + "Iturama": 3134400, + "Itutinga": 3134509, + "Jaboticatubas": 3134608, + "Jacinto": 3134707, + "Jacuí": 3134806, + "Jacutinga": 3134905, + "Jaguaraçu": 3135001, + "Jaíba": 3135050, + "Jampruca": 3135076, + "Janaúba": 3135100, + "Januária": 3135209, + "Japaraíba": 3135308, + "Japonvar": 3135357, + "Jeceaba": 3135407, + "Jenipapo de Minas": 3135456, + "Jequeri": 3135506, + "Jequitaí": 3135605, + "Jequitibá": 3135704, + "Jequitinhonha": 3135803, + "Jesuânia": 3135902, + "Joaíma": 3136009, + "Joanésia": 3136108, + "João Monlevade": 3136207, + "João Pinheiro": 3136306, + "Joaquim Felício": 3136405, + "Jordânia": 3136504, + "José Gonçalves de Minas": 3136520, + "José Raydan": 3136553, + "Josenópolis": 3136579, + "Nova União": 3136603, + "Juatuba": 3136652, + "Juiz de Fora": 3136702, + "Juramento": 3136801, + "Juruaia": 3136900, + "Juvenília": 3136959, + "Ladainha": 3137007, + "Lagamar": 3137106, + "Lagoa da Prata": 3137205, + "Lagoa dos Patos": 3137304, + "Lagoa Dourada": 3137403, + "Lagoa Formosa": 3137502, + "Lagoa Grande": 3137536, + "Lagoa Santa": 3137601, + "Lajinha": 3137700, + "Lambari": 3137809, + "Lamim": 3137908, + "Laranjal": 3138005, + "Lassance": 3138104, + "Lavras": 3138203, + "Leandro Ferreira": 3138302, + "Leme do Prado": 3138351, + "Leopoldina": 3138401, + "Liberdade": 3138500, + "Lima Duarte": 3138609, + "Limeira do Oeste": 3138625, + "Lontra": 3138658, + "Luisburgo": 3138674, + "Luislândia": 3138682, + "Luminárias": 3138708, + "Luz": 3138807, + "Machacalis": 3138906, + "Machado": 3139003, + "Madre de Deus de Minas": 3139102, + "Malacacheta": 3139201, + "Mamonas": 3139250, + "Manga": 3139300, + "Manhuaçu": 3139409, + "Manhumirim": 3139508, + "Mantena": 3139607, + "Maravilhas": 3139706, + "Mar de Espanha": 3139805, + "Maria da Fé": 3139904, + "Mariana": 3140001, + "Marilac": 3140100, + "Mário Campos": 3140159, + "Maripá de Minas": 3140209, + "Marliéria": 3140308, + "Marmelópolis": 3140407, + "Martinho Campos": 3140506, + "Martins Soares": 3140530, + "Mata Verde": 3140555, + "Materlândia": 3140605, + "Mateus Leme": 3140704, + "Matias Barbosa": 3140803, + "Matias Cardoso": 3140852, + "Matipó": 3140902, + "Mato Verde": 3141009, + "Matozinhos": 3141108, + "Matutina": 3141207, + "Medeiros": 3141306, + "Medina": 3141405, + "Mendes Pimentel": 3141504, + "Mercês": 3141603, + "Mesquita": 3141702, + "Minas Novas": 3141801, + "Minduri": 3141900, + "Mirabela": 3142007, + "Miradouro": 3142106, + "Miraí": 3142205, + "Miravânia": 3142254, + "Moeda": 3142304, + "Moema": 3142403, + "Monjolos": 3142502, + "Monsenhor Paulo": 3142601, + "Montalvânia": 3142700, + "Monte Alegre de Minas": 3142809, + "Monte Azul": 3142908, + "Monte Belo": 3143005, + "Monte Carmelo": 3143104, + "Monte Formoso": 3143153, + "Monte Santo de Minas": 3143203, + "Montes Claros": 3143302, + "Monte Sião": 3143401, + "Montezuma": 3143450, + "Morada Nova de Minas": 3143500, + "Morro da Garça": 3143609, + "Morro do Pilar": 3143708, + "Munhoz": 3143807, + "Muriaé": 3143906, + "Mutum": 3144003, + "Muzambinho": 3144102, + "Nacip Raydan": 3144201, + "Nanuque": 3144300, + "Naque": 3144359, + "Natalândia": 3144375, + "Natércia": 3144409, + "Nazareno": 3144508, + "Nepomuceno": 3144607, + "Ninheira": 3144656, + "Nova Belém": 3144672, + "Nova Era": 3144706, + "Nova Lima": 3144805, + "Nova Módica": 3144904, + "Nova Ponte": 3145000, + "Nova Porteirinha": 3145059, + "Nova Resende": 3145109, + "Nova Serrana": 3145208, + "Novo Cruzeiro": 3145307, + "Novo Oriente de Minas": 3145356, + "Novorizonte": 3145372, + "Olaria": 3145406, + "Olhos-d'Água": 3145455, + "Olímpio Noronha": 3145505, + "Oliveira": 3145604, + "Oliveira Fortes": 3145703, + "Onça de Pitangui": 3145802, + "Oratórios": 3145851, + "Orizânia": 3145877, + "Ouro Branco": 3145901, + "Ouro Fino": 3146008, + "Ouro Preto": 3146107, + "Ouro Verde de Minas": 3146206, + "Padre Carvalho": 3146255, + "Padre Paraíso": 3146305, + "Paineiras": 3146404, + "Pains": 3146503, + "Pai Pedro": 3146552, + "Paiva": 3146602, + "Palma": 3146701, + "Palmópolis": 3146750, + "Papagaios": 3146909, + "Paracatu": 3147006, + "Pará de Minas": 3147105, + "Paraguaçu": 3147204, + "Paraisópolis": 3147303, + "Paraopeba": 3147402, + "Passabém": 3147501, + "Passa Quatro": 3147600, + "Passa Tempo": 3147709, + "Passa Vinte": 3147808, + "Passos": 3147907, + "Patis": 3147956, + "Patos de Minas": 3148004, + "Patrocínio": 3148103, + "Patrocínio do Muriaé": 3148202, + "Paula Cândido": 3148301, + "Paulistas": 3148400, + "Pavão": 3148509, + "Peçanha": 3148608, + "Pedra Azul": 3148707, + "Pedra Bonita": 3148756, + "Pedra do Anta": 3148806, + "Pedra do Indaiá": 3148905, + "Pedra Dourada": 3149002, + "Pedralva": 3149101, + "Pedras de Maria da Cruz": 3149150, + "Pedrinópolis": 3149200, + "Pedro Leopoldo": 3149309, + "Pedro Teixeira": 3149408, + "Pequeri": 3149507, + "Pequi": 3149606, + "Perdigão": 3149705, + "Perdizes": 3149804, + "Perdões": 3149903, + "Periquito": 3149952, + "Pescador": 3150000, + "Piau": 3150109, + "Piedade de Caratinga": 3150158, + "Piedade de Ponte Nova": 3150208, + "Piedade do Rio Grande": 3150307, + "Piedade dos Gerais": 3150406, + "Pimenta": 3150505, + "Pingo-d'Água": 3150539, + "Pintópolis": 3150570, + "Piracema": 3150604, + "Pirajuba": 3150703, + "Piranga": 3150802, + "Piranguçu": 3150901, + "Piranguinho": 3151008, + "Pirapetinga": 3151107, + "Pirapora": 3151206, + "Piraúba": 3151305, + "Pitangui": 3151404, + "Piumhi": 3151503, + "Planura": 3151602, + "Poço Fundo": 3151701, + "Poços de Caldas": 3151800, + "Pocrane": 3151909, + "Pompéu": 3152006, + "Ponte Nova": 3152105, + "Ponto Chique": 3152131, + "Ponto dos Volantes": 3152170, + "Porteirinha": 3152204, + "Porto Firme": 3152303, + "Poté": 3152402, + "Pouso Alegre": 3152501, + "Pouso Alto": 3152600, + "Prados": 3152709, + "Prata": 3152808, + "Pratápolis": 3152907, + "Pratinha": 3153004, + "Presidente Bernardes": 3153103, + "Presidente Juscelino": 3153202, + "Presidente Kubitschek": 3153301, + "Presidente Olegário": 3153400, + "Alto Jequitibá": 3153509, + "Prudente de Morais": 3153608, + "Quartel Geral": 3153707, + "Queluzito": 3153806, + "Raposos": 3153905, + "Raul Soares": 3154002, + "Recreio": 3154101, + "Reduto": 3154150, + "Resende Costa": 3154200, + "Resplendor": 3154309, + "Ressaquinha": 3154408, + "Riachinho": 3154457, + "Riacho dos Machados": 3154507, + "Ribeirão das Neves": 3154606, + "Ribeirão Vermelho": 3154705, + "Rio Acima": 3154804, + "Rio Casca": 3154903, + "Rio Doce": 3155009, + "Rio do Prado": 3155108, + "Rio Espera": 3155207, + "Rio Manso": 3155306, + "Rio Novo": 3155405, + "Rio Paranaíba": 3155504, + "Rio Pardo de Minas": 3155603, + "Rio Piracicaba": 3155702, + "Rio Pomba": 3155801, + "Rio Preto": 3155900, + "Rio Vermelho": 3156007, + "Ritápolis": 3156106, + "Rochedo de Minas": 3156205, + "Rodeiro": 3156304, + "Romaria": 3156403, + "Rosário da Limeira": 3156452, + "Rubelita": 3156502, + "Rubim": 3156601, + "Sabará": 3156700, + "Sabinópolis": 3156809, + "Sacramento": 3156908, + "Salinas": 3157005, + "Salto da Divisa": 3157104, + "Santa Bárbara": 3157203, + "Santa Bárbara do Leste": 3157252, + "Santa Bárbara do Monte Verde": 3157278, + "Santa Bárbara do Tugúrio": 3157302, + "Santa Cruz de Minas": 3157336, + "Santa Cruz de Salinas": 3157377, + "Santa Cruz do Escalvado": 3157401, + "Santa Efigênia de Minas": 3157500, + "Santa Fé de Minas": 3157609, + "Santa Helena de Minas": 3157658, + "Santa Juliana": 3157708, + "Santa Luzia": 3157807, + "Santa Margarida": 3157906, + "Santa Maria de Itabira": 3158003, + "Santa Maria do Salto": 3158102, + "Santa Maria do Suaçuí": 3158201, + "Santana da Vargem": 3158300, + "Santana de Cataguases": 3158409, + "Santana de Pirapama": 3158508, + "Santana do Deserto": 3158607, + "Santana do Garambéu": 3158706, + "Santana do Jacaré": 3158805, + "Santana do Manhuaçu": 3158904, + "Santana do Paraíso": 3158953, + "Santana do Riacho": 3159001, + "Santana dos Montes": 3159100, + "Santa Rita de Caldas": 3159209, + "Santa Rita de Jacutinga": 3159308, + "Santa Rita de Minas": 3159357, + "Santa Rita de Ibitipoca": 3159407, + "Santa Rita do Itueto": 3159506, + "Santa Rita do Sapucaí": 3159605, + "Santa Rosa da Serra": 3159704, + "Santa Vitória": 3159803, + "Santo Antônio do Amparo": 3159902, + "Santo Antônio do Aventureiro": 3160009, + "Santo Antônio do Grama": 3160108, + "Santo Antônio do Itambé": 3160207, + "Santo Antônio do Jacinto": 3160306, + "Santo Antônio do Monte": 3160405, + "Santo Antônio do Retiro": 3160454, + "Santo Antônio do Rio Abaixo": 3160504, + "Santo Hipólito": 3160603, + "Santos Dumont": 3160702, + "São Bento Abade": 3160801, + "São Brás do Suaçuí": 3160900, + "São Domingos das Dores": 3160959, + "São Domingos do Prata": 3161007, + "São Félix de Minas": 3161056, + "São Francisco": 3161106, + "São Francisco de Paula": 3161205, + "São Francisco de Sales": 3161304, + "São Francisco do Glória": 3161403, + "São Geraldo": 3161502, + "São Geraldo da Piedade": 3161601, + "São Geraldo do Baixio": 3161650, + "São Gonçalo do Abaeté": 3161700, + "São Gonçalo do Pará": 3161809, + "São Gonçalo do Rio Abaixo": 3161908, + "São Gonçalo do Sapucaí": 3162005, + "São Gotardo": 3162104, + "São João Batista do Glória": 3162203, + "São João da Lagoa": 3162252, + "São João da Mata": 3162302, + "São João da Ponte": 3162401, + "São João das Missões": 3162450, + "São João del Rei": 3162500, + "São João do Manhuaçu": 3162559, + "São João do Manteninha": 3162575, + "São João do Oriente": 3162609, + "São João do Pacuí": 3162658, + "São João do Paraíso": 3162708, + "São João Evangelista": 3162807, + "São João Nepomuceno": 3162906, + "São Joaquim de Bicas": 3162922, + "São José da Barra": 3162948, + "São José da Lapa": 3162955, + "São José da Safira": 3163003, + "São José da Varginha": 3163102, + "São José do Alegre": 3163201, + "São José do Divino": 3163300, + "São José do Goiabal": 3163409, + "São José do Jacuri": 3163508, + "São José do Mantimento": 3163607, + "São Lourenço": 3163706, + "São Miguel do Anta": 3163805, + "São Pedro da União": 3163904, + "São Pedro dos Ferros": 3164001, + "São Pedro do Suaçuí": 3164100, + "São Romão": 3164209, + "São Roque de Minas": 3164308, + "São Sebastião da Bela Vista": 3164407, + "São Sebastião da Vargem Alegre": 3164431, + "São Sebastião do Anta": 3164472, + "São Sebastião do Maranhão": 3164506, + "São Sebastião do Oeste": 3164605, + "São Sebastião do Paraíso": 3164704, + "São Sebastião do Rio Preto": 3164803, + "São Sebastião do Rio Verde": 3164902, + "São Tiago": 3165008, + "São Tomás de Aquino": 3165107, + "São Tomé das Letras": 3165206, + "São Vicente de Minas": 3165305, + "Sapucaí-Mirim": 3165404, + "Sardoá": 3165503, + "Sarzedo": 3165537, + "Setubinha": 3165552, + "Sem-Peixe": 3165560, + "Senador Amaral": 3165578, + "Senador Cortes": 3165602, + "Senador Firmino": 3165701, + "Senador José Bento": 3165800, + "Senador Modestino Gonçalves": 3165909, + "Senhora de Oliveira": 3166006, + "Senhora do Porto": 3166105, + "Senhora dos Remédios": 3166204, + "Sericita": 3166303, + "Seritinga": 3166402, + "Serra Azul de Minas": 3166501, + "Serra da Saudade": 3166600, + "Serra dos Aimorés": 3166709, + "Serra do Salitre": 3166808, + "Serrania": 3166907, + "Serranópolis de Minas": 3166956, + "Serranos": 3167004, + "Serro": 3167103, + "Sete Lagoas": 3167202, + "Silveirânia": 3167301, + "Silvianópolis": 3167400, + "Simão Pereira": 3167509, + "Simonésia": 3167608, + "Sobrália": 3167707, + "Soledade de Minas": 3167806, + "Tabuleiro": 3167905, + "Taiobeiras": 3168002, + "Taparuba": 3168051, + "Tapira": 3168101, + "Tapiraí": 3168200, + "Taquaraçu de Minas": 3168309, + "Tarumirim": 3168408, + "Teixeiras": 3168507, + "Teófilo Otoni": 3168606, + "Timóteo": 3168705, + "Tiradentes": 3168804, + "Tiros": 3168903, + "Tocantins": 3169000, + "Tocos do Moji": 3169059, + "Toledo": 3169109, + "Tombos": 3169208, + "Três Corações": 3169307, + "Três Marias": 3169356, + "Três Pontas": 3169406, + "Tumiritinga": 3169505, + "Tupaciguara": 3169604, + "Turmalina": 3169703, + "Turvolândia": 3169802, + "Ubá": 3169901, + "Ubaí": 3170008, + "Ubaporanga": 3170057, + "Uberaba": 3170107, + "Uberlândia": 3170206, + "Umburatiba": 3170305, + "Unaí": 3170404, + "União de Minas": 3170438, + "Uruana de Minas": 3170479, + "Urucânia": 3170503, + "Urucuia": 3170529, + "Vargem Alegre": 3170578, + "Vargem Bonita": 3170602, + "Vargem Grande do Rio Pardo": 3170651, + "Varginha": 3170701, + "Varjão de Minas": 3170750, + "Várzea da Palma": 3170800, + "Varzelândia": 3170909, + "Vazante": 3171006, + "Verdelândia": 3171030, + "Veredinha": 3171071, + "Veríssimo": 3171105, + "Vermelho Novo": 3171154, + "Vespasiano": 3171204, + "Viçosa": 3171303, + "Vieiras": 3171402, + "Mathias Lobato": 3171501, + "Virgem da Lapa": 3171600, + "Virgínia": 3171709, + "Virginópolis": 3171808, + "Virgolândia": 3171907, + "Visconde do Rio Branco": 3172004, + "Volta Grande": 3172103, + "Wenceslau Braz": 3172202, + "Dona Eusébia": 3122900, + "São Thomé das Letras": 3165206, + "Pingo d'Água": 3150539 +} \ No newline at end of file diff --git a/WebScrapper/DataETL/src/__init__.py b/WebScrapper/DataETL/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/WebScrapper/DataETL/src/config.py b/WebScrapper/DataETL/src/config.py new file mode 100644 index 0000000..a24c51a --- /dev/null +++ b/WebScrapper/DataETL/src/config.py @@ -0,0 +1,18 @@ +class Config: + def __init__(self, extractor_type, loader_type, transformers=None, **kwargs): + self.extractor_type = extractor_type + self.loader_type = loader_type + self.transformers = transformers or [] + self.kwargs = kwargs + + def get_class_reference(self, module, class_name): + return getattr(module, class_name) + + def get_extractor_config(self): + return self.kwargs.get("extractor", {}) + + def get_loader_config(self): + return self.kwargs.get("loader", {}) + + def get_transformer_configs(self): + return self.transformers diff --git a/WebScrapper/DataETL/src/connect.py b/WebScrapper/DataETL/src/connect.py new file mode 100644 index 0000000..293851f --- /dev/null +++ b/WebScrapper/DataETL/src/connect.py @@ -0,0 +1,31 @@ +from abc import ABC +from sqlalchemy import create_engine +from models.base import Base + + +class ConnectorService(ABC): + ... + + +class PostgreSQLConnector(ConnectorService): + def __init__(self, host, port, database, user, password): + self.host = host + self.database = database + self.user = user + self.password = password + self.port = port + self.connection = None + + def connect(self): + try: + self.connection = create_engine( + f"postgresql+psycopg2://{self.user}:{self.password}@{self.host}:{self.port}/{self.database}", echo=True) + print("Connected to PostgreSQL via SQLAlchemy") + # Configuração do banco de dados + Base.metadata.create_all(self.connection) # noqa: F405 + return self.connection + except Exception as e: + print("Error connecting to PostgreSQL: %s", e) + + def get_connection(self): + return self.connection diff --git a/WebScrapper/DataETL/src/etl.py b/WebScrapper/DataETL/src/etl.py new file mode 100644 index 0000000..05a092d --- /dev/null +++ b/WebScrapper/DataETL/src/etl.py @@ -0,0 +1,34 @@ +from . import extractor +from . import load +from . import transform + + +class ETL: + def __init__(self, config): + self.config = config + self.extractor = self._get_instance( + extractor, self.config.extractor_type, self.config.get_extractor_config()) + self.transformers = [self._get_instance( + transform, t) for t in self.config.get_transformer_configs()] + self.loader = self._get_instance( + load, self.config.loader_type, self.config.get_loader_config()) + + def _get_instance(self, module, class_name, config=None): + cls = self.config.get_class_reference(module, class_name) + if config: + return cls(**config) + else: + return cls + + def process(self): + # Extract + data = self.extractor.extract() + + # Transform + for transformer in self.transformers: + data = transformer().transform(data) + + # Load + self.loader.load(data) + + print("ETL process completed successfully!") diff --git a/WebScrapper/DataETL/src/extractor.py b/WebScrapper/DataETL/src/extractor.py new file mode 100644 index 0000000..a8613d2 --- /dev/null +++ b/WebScrapper/DataETL/src/extractor.py @@ -0,0 +1,53 @@ +from abc import ABC, abstractmethod +import pandas as pd + + +class ExtractService(ABC): + @abstractmethod + def extract(self) -> pd.DataFrame: + pass + + +class MunicipioExcelExtractor(ExtractService): + def __init__(self, file_name_path: str): + self.file_name_path = file_name_path + + def extract(self) -> pd.DataFrame: + try: + df = pd.read_excel(self.file_name_path, + skiprows=5, + usecols=['UF', 'Código do Município', 'Nome do Município']) + return df + except Exception as e: + print(f"Erro ao extrair os dados: {e}") + return pd.DataFrame() # Retorna DataFrame vazio no caso de erro + + +class IndicadorExcelExtractor(ExtractService): + def __init__(self, file_name_path) -> None: + self.file_name_path = file_name_path + + def extract(self) -> pd.DataFrame: + try: + df = pd.read_excel(self.file_name_path, + skiprows=8, + usecols=["NU_ANO_CENSO", + "SG_UF", + "CO_MUNICIPIO", + "NO_MUNICIPIO", + "NO_CATEGORIA", + "NO_DEPENDENCIA", + "1_CAT_FUN_AI", + "1_CAT_FUN_AF", + "1_CAT_MED", + "2_CAT_FUN_AI", + "2_CAT_FUN_AF", + "2_CAT_MED", + "3_CAT_FUN_AI", + "3_CAT_FUN_AF", + "3_CAT_MED"] + ) + return df + except Exception as e: + print(f"Erro ao extrair os dados: {e}") + return pd.DataFrame() # Retorna DataFrame vazio no caso de erro diff --git a/WebScrapper/DataETL/src/load.py b/WebScrapper/DataETL/src/load.py new file mode 100644 index 0000000..cc0141c --- /dev/null +++ b/WebScrapper/DataETL/src/load.py @@ -0,0 +1,132 @@ +import json +import pandas as pd +from abc import ABC, abstractmethod +from .connect import PostgreSQLConnector +from models import Filtro, Matricula, Indicador +from sqlalchemy.orm import Session + + +class LoadService(ABC): + @abstractmethod + def load(self, df: pd.DataFrame): + pass + + +class PandasToJSONMunicipioRefererenceLoader(LoadService): + def __init__(self, file_name_path): + self.file_name_path = file_name_path + + def load(self, df: pd.DataFrame): + df['id'] = df['id'].astype(int) + municipios_map = dict(zip(df['nome'], df['id'])) + + # Tratamento de caso especial + # Esse municipio possui duas formas de se escrever + municipios_map['Dona Eusébia'] = 3122900 + municipios_map['São Thomé das Letras'] = 3165206 + municipios_map["Pingo d'Água"] = 3150539 + print(municipios_map) + + # Salvamento do dicionário em arquivo Python + content = f'municipio_map = { + json.dumps( + municipios_map, + indent=4, + ensure_ascii=False + )}' + + try: + with open(self.file_name_path, 'w') as file: + file.write(content) + print(f"\nDicionário salvo em '{self.file_name_path}'") + except Exception as e: + print(f"Erro ao salvar o arquivo: {e}") + + +class MunicipioToPostgresLoader(LoadService): + def __init__(self, connection_details): + self.connector = PostgreSQLConnector(**connection_details) + + def load(self, df: pd.DataFrame): + try: + df.to_sql('Municipio', + con=self.connector.connect(), + if_exists='append', + index=False) + print("Dados carregados no banco de dados com sucesso!") + except Exception as e: + print(f"Erro ao carregar os dados no banco de dados: {e}") + +# class IndicadorToPostgresLoader(LoadService): + + +class DerivedFromFilterToPostgresLoader(LoadService): + def __init__(self, connection_details): + self.connector = PostgreSQLConnector(**connection_details) + self.connector.connect() + + def load(self, df: pd.DataFrame): + try: + self.__bulk_insert_data(df) + except Exception as e: + print(f"Erro ao carregar os dados no banco de dados: {e}") + + def __get_DB_existing_filters(self): + # Obtém todos os filtros existentes no banco de dados + with Session(self.connector.get_connection()) as session: + existing_filtros = session.query(Filtro).all() + # Converte em um dicionário para acesso rápido + filter_dict = {(f.municipio_id, f.etapa_de_ensino, f.ano): + f.id for f in existing_filtros} + return filter_dict + + def __get_row_id_filter(self, row, session): + filter_key = (row['municipio_id'], + row['etapa_de_ensino'], row['ano']) + + if filter_key in self.__filter_dict: + # Filtro já existe, usar o ID existente. + id_filter = self.__filter_dict[filter_key] + else: + # Criar novo e adicionar no dicionario + filtro = Filtro( + municipio_id=row['municipio_id'], etapa_de_ensino=row['etapa_de_ensino'], ano=row['ano']) + session.add(filtro) + session.flush() + id_filter = filtro.id + self.__filter_dict[filter_key] = id_filter + return id_filter + + def __get_table_type(self, row, id_filter, DataFrame): + if 'taxa_de_aprovacao' in DataFrame: + indicador = Indicador(id_filtro=id_filter, + dependencia_administrativa=row['dependencia_administrativa'], + taxa_de_aprovacao=row['taxa_de_aprovacao'], + taxa_de_reprovacao=row['taxa_de_reprovacao'], + taxa_de_abandono=row['taxa_de_abandono']) + return indicador + if 'quantidade' in DataFrame: + matricula = Matricula(id_filtro=id_filter, + cor_raca=row['cor_raca'], + dependencia_administrativa=row['dependencia_administrativa'], + quantidade=row['quantidade']) + return matricula + raise ValueError("The pattern must follow the skeleton") + + def __bulk_insert_data(self, full_table_data: pd.DataFrame, current_file: str = None): + self.__filter_dict = self.__get_DB_existing_filters() + with Session(self.connector.get_connection()) as session: + table_objs = [] + + # Processar cada linha do DataFrame + for _, row in full_table_data.iterrows(): + # Obter ou criar o filtro e obter seu ID + id_filter = self.__get_row_id_filter(row=row, session=session) + table_type = self.__get_table_type( + row=row, + id_filter=id_filter, + DataFrame=full_table_data) + table_objs.append(table_type) + # Inserir em lote + session.bulk_save_objects(table_objs) + session.commit() diff --git a/WebScrapper/DataETL/src/transform.py b/WebScrapper/DataETL/src/transform.py new file mode 100644 index 0000000..e760fbd --- /dev/null +++ b/WebScrapper/DataETL/src/transform.py @@ -0,0 +1,106 @@ +import pandas as pd +import numpy as np +from abc import ABC, abstractmethod + + +class TransformService(ABC): + @abstractmethod + def transform(self, df: pd.DataFrame) -> pd.DataFrame: + pass + + +class StandardizeMunicipioDataTransformer(TransformService): + def transform(self, df: pd.DataFrame) -> pd.DataFrame: + df = df[df['UF'] == 'MG'] + df = df.drop_duplicates() + df = df.rename(columns={ + 'Código do Município': 'id', + 'Nome do Município': 'nome', + }) + return df + + +class StandardizeMatriculaDataTransformer(TransformService): + def transform(self, df: pd.DataFrame) -> pd.DataFrame: + self.df = df + self.__rename() + self.__filter() + self.__melt() + self.__pivot() + self.__standard_rename() + return self.df + + +class StandardizeIndicadorDataTransformer(TransformService): + def transform(self, df: pd.DataFrame) -> pd.DataFrame: + self.df = df + self.__rename() + self.__filter() + self.__melt() + self.__pivot() + self.__standard_rename() + return self.df + + def __rename(self): + header_map = {'NU_ANO_CENSO': 'ano', + 'SG_UF': 'UF', + 'CO_MUNICIPIO': 'municipio_id', + 'NO_MUNICIPIO': 'nome', + 'NO_CATEGORIA': 'localização', + 'NO_DEPENDENCIA': 'dependencia_administrativa', + '1_CAT_FUN_AI': 'aprovacao_EF1', + '1_CAT_FUN_AF': 'aprovacao_EF2', + '1_CAT_MED': 'aprovacao_EM', + '2_CAT_FUN_AI': 'reprovacao_EF1', + '2_CAT_FUN_AF': 'reprovacao_EF2', + '2_CAT_MED': 'reprovacao_EM', + '3_CAT_FUN_AI': 'abandono_EF1', + '3_CAT_FUN_AF': 'abandono_EF2', + '3_CAT_MED': 'abandono_EM' + } + self.df.rename(columns=header_map, inplace=True) + + def __filter(self): + self.df = self.df[self.df['UF'] == 'MG'] + self.df = self.df[self.df['localização'] == 'Total'] + self.df = self.df.drop(columns=['localização']) + self.df['municipio_id'] = self.df['municipio_id'].astype(int) + + def __melt(self): + self.df = pd.melt( + self.df, + id_vars=['ano', 'UF', 'municipio_id', + 'nome', 'dependencia_administrativa'], + value_vars=['aprovacao_EF1', 'aprovacao_EF2', 'aprovacao_EM', + 'reprovacao_EF1', 'reprovacao_EF2', 'reprovacao_EM', + 'abandono_EF1', 'abandono_EF2', 'abandono_EM'], + var_name='tipo_etapa', + value_name='valor' + ) + self.df[['tipo', 'etapa_de_ensino'] + ] = self.df['tipo_etapa'].str.split('_', expand=True) + self.df.drop('tipo_etapa', axis=1, inplace=True) + + def __pivot(self): + self.df = self.df.pivot_table( + index=['ano', 'UF', 'municipio_id', 'nome', + 'dependencia_administrativa', 'etapa_de_ensino'], + columns='tipo', + values='valor', + aggfunc='first' + ).reset_index() + + def __standard_rename(self): + self.df.columns.name = None + self.df.rename(columns={'aprovacao': 'taxa_de_aprovacao', 'reprovacao': 'taxa_de_reprovacao', + 'abandono': 'taxa_de_abandono', 'nome': 'Município'}, inplace=True) + with pd.option_context('future.no_silent_downcasting', True): + self.df['taxa_de_aprovacao'] = self.df['taxa_de_aprovacao'].replace({ + '--': np.nan}) + self.df['taxa_de_reprovacao'] = self.df['taxa_de_reprovacao'].replace({ + '--': np.nan}) + self.df['taxa_de_abandono'] = self.df['taxa_de_abandono'].replace({ + '--': np.nan}) + + # substitui NaN por None + self.df = self.df.where(pd.notnull(self.df), None) diff --git a/WebScrapper/DataScraper/InepScraper.py b/WebScrapper/DataScraper/InepScraper.py new file mode 100644 index 0000000..ceff3ee --- /dev/null +++ b/WebScrapper/DataScraper/InepScraper.py @@ -0,0 +1,272 @@ +import time +import os +import shutil +import re +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from webdriver_manager.chrome import ChromeDriverManager +from selenium.webdriver.chrome.service import Service +from selenium.webdriver.support.ui import Select +from selenium.webdriver.common.action_chains import ActionChains +from selenium.webdriver.common.keys import Keys +from selenium.common.exceptions import NoSuchElementException, ElementNotInteractableException, StaleElementReferenceException, InvalidSelectorException, ElementClickInterceptedException, TimeoutException +from datetime import datetime + +link = "https://inepdata.inep.gov.br/analytics/saw.dll?Dashboard&PortalPath=%2Fshared%2FDisseminação%20dos%20Censos%2FEducação%20Básica%2FPainéis%2FCenso%20da%20Educação%20Básica&Page=Matrícula%20-%20Por%20Ano&NQUser=inepdata&NQPassword=Inep2014" + +script_dir = os.path.dirname(os.path.realpath(__file__)) +web_scrapper_dir = os.path.abspath(os.path.join(script_dir, os.pardir)) +download_dir = os.path.abspath(os.path.join(web_scrapper_dir, "./oracle_data")) + +if not os.path.exists(download_dir): + os.makedirs(download_dir) + +options = webdriver.ChromeOptions() +prefs = {"download.default_directory": download_dir} + + +options.add_experimental_option('prefs', prefs) + + +service = Service(ChromeDriverManager().install()) +navegador = webdriver.Chrome(service=service, options=options) + +max_tentativas = 200 + + +def tryFind(function, interval: float = 0.2): + for tentativa in range(max_tentativas): + try: + element = function() + return element + except NoSuchElementException: + print(f"Trying again find the element {tentativa}...") + time.sleep(interval) + except ElementNotInteractableException: + print(f"Trying again interact with the element {tentativa}...") + time.sleep(interval) + except StaleElementReferenceException: + print(f"Trying again stale element {tentativa}...") + time.sleep(interval) + except InvalidSelectorException: + print(f"Invalid Selector: Xpath invalid {tentativa}...") + time.sleep(interval) + except Exception: + print(f"Trying again generic problem {tentativa}...") + time.sleep(interval) + # print("Erro Inesperado!!!") + # raise Exception("Não foi possível acessar o elemento procurado!") + + +# Definir o zoom para 100% +navegador.execute_script("document.body.style.zoom='100%'") +navegador.get(link) +actions = ActionChains(navegador) + +tryFind(lambda: + navegador.find_element(By.XPATH, '/html/body/div[8]/table[2]/tbody/tr[1]/td[2]/div/table[1]/tbody/tr/td[2]/div[1]/div/table[1]/tbody/tr/td[1]/div/table/tbody/tr/td/div/table/tbody/tr/td/div/table/tbody/tr/td[2]/div/div/div/table/tbody/tr/td/div/form/div/table/tbody/tr[2]/td/table/tbody/tr/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td/span/span/span/img').click() + ) # open window search button + + +tryFind(lambda: + navegador.find_element( + By.XPATH, '//*[@id="idRemoveAllButton"]').click() + ) # Remove ALL button + +tryFind(lambda: + navegador.find_element( + By.XPATH, '/html/body/div[12]/div/table/tbody[1]/tr/td/div[2]/table/tbody/tr[1]/th[2]/div/div/span/img').click() + ) # abre barra de pesquisa + +tryFind(lambda: + navegador.find_element( + By.XPATH, '//*[@id="AvailableDataBrowserGroupBoxTreeButton"]').click() + ) # selecionar membro pai + +tryFind(lambda: + navegador.find_element( + By.XPATH, '//*[@id="whyNeedAnID$LocalidadeDim.LocalidadeDim_SearchMemberSelect$Brasil_Brasil_disclosure"]').click() + ) # abre subtopico Brasil + +tryFind(lambda: + navegador.find_element( + By.XPATH, '//*[@id="whyNeedAnID$LocalidadeDim.LocalidadeDim_SearchMemberSelect$Regi%c3%a3o_Sudeste_disclosure"]').click() + ) # abre subtopico sudeste + +tryFind(lambda: + navegador.find_element( + By.XPATH, '//*[@id="whyNeedAnID$LocalidadeDim.LocalidadeDim_SearchMemberSelect$UF_MG_details"]/span').click() + ) # seleciona MG + +actions.key_down(Keys.TAB) +actions.key_down(Keys.ENTER) +actions.perform() # confirma em ok + +time.sleep(0.2) +option = tryFind(lambda: + navegador.find_element( + By.XPATH, '//*[@id="AvailableDataBrowserGroupBoxSearchLevelID"]').click() + ) +actions.key_down(Keys.ARROW_DOWN) +actions.key_up(Keys.ARROW_DOWN) +actions.key_down(Keys.ENTER) +actions.key_up(Keys.ENTER) +actions.perform() # seleciona filhos como municipio + + +tryFind(lambda: + navegador.find_element(By.XPATH, '//*[@id="searchButton"]').click() + ) # clica em pesquisar + + +botao_mais = '//*[@id="searchDialogMoreButton"]' +while True: + try: + more = WebDriverWait(navegador, 3).until( + EC.element_to_be_clickable((By.XPATH, botao_mais)) + ) + more.click() + time.sleep(0.15) # abre todos os em 'mais' + except (ElementClickInterceptedException, TimeoutException): + # Se o botão não for clicável ou não for encontrado, saia do loop + print("Botão não clicável ou não encontrado.") + break + +tryFind(lambda: + navegador.find_element(By.XPATH, '//*[@id="idMoveAllButton"]').click() + ) # mover todos os municipios + +tryFind(lambda: + navegador.find_element(By.LINK_TEXT, 'OK').click() + ) # confirma selecao + + +def wait_load_table(): + tabela = "/html/body/div[8]/table[2]/tbody/tr[1]/td[2]/div/table[1]/tbody/tr/td[2]/div[1]/div/table[3]/tbody/tr/td[1]/div/table/tbody/tr[2]/td/div/div[3]/table/tbody/tr/td/div/table/tbody/tr/td/div/table/tbody/tr[2]/td/div/div/div/div[1]/table/tbody/tr[1]/td/table/tbody/tr/td/div[2]/table/tbody/tr[3]/td" + time.sleep(2) + WebDriverWait(navegador, 20).until( + EC.element_to_be_clickable((By.XPATH, tabela)) + ) + + +def open_box(option_to_select, delay=4): + tryFind(lambda: WebDriverWait(navegador, 10).until( + EC.element_to_be_clickable( + (By.CSS_SELECTOR, f"div[title='{option_to_select}']")) + ).click(), 2) + wait_load_table() + + +def open_dropdown(selected_option): + tryFind(lambda: WebDriverWait(navegador, 10).until( + EC.element_to_be_clickable( + (By.CSS_SELECTOR, f"input[title='{selected_option}']")) + ).click(), 2) + + +def download(): + wait_load_table() + tryFind(lambda: + navegador.find_element(By.LINK_TEXT, 'Exportar').click() + ) + tryFind(lambda: + navegador.find_element(By.LINK_TEXT, 'Dados').click() + ) + tryFind(lambda: + navegador.find_element(By.LINK_TEXT, 'Formato CSV').click() + ) + time.sleep(4) + tryFind(lambda: + navegador.find_element(By.CSS_SELECTOR, "a[name='OK']").click() + ) + + +def remove_special_characters(text): + # Substitui qualquer caractere que não seja letra ou número por uma string vazia + cleaned_text = re.sub(r'[^A-Za-z0-9]+', '', text) + return cleaned_text + + +def rename_and_move(pattern: str, new_name: str): + # Tabela Dinâmica + # if not os.path.exists(new_dir): + # os.makedirs(new_dir) + for f in os.listdir(download_dir): + if f.startswith(pattern) and f.endswith('.csv'): + source_name = os.path.join(download_dir, f) + new_source_name = os.path.join(download_dir, new_name) + shutil.move(source_name, new_source_name) + print(f"Arquivo renomeado de {source_name} para {new_source_name}") + + +def alternate_years_and_download(stage, level): + date = datetime.now().year - 1 # offset of censo escolar + while (date >= 2020): + wait_load_table() + tryFind(lambda: + navegador.find_element( + By.CSS_SELECTOR, "img[src='/analyticsRes/res/s_InepdataCensoEscolar/master/selectdropdown_ena.png']").click() + ) # year dropdown + tryFind(lambda: + navegador.find_element( + By.CSS_SELECTOR, f"div[title='{str(date)}']").click() + ) # select year + # download archive + download() + pattern = "Tabela Dinâmica" + date_string = remove_special_characters(str(date)) + stage = remove_special_characters(stage) + level = remove_special_characters(level) + new_name = (f"{date_string}_{stage}_{level}_extract.csv") + rename_and_move(pattern, new_name) + date -= 1 + time.sleep(2) + + +def switch_stages(): + etapas_de_ensino = ['Ensino Fundamental', 'Ensino Médio'] + open_dropdown('Educação Básica') + for etapa in etapas_de_ensino: + open_box(etapa, delay=4) + if etapa == 'Ensino Fundamental': + # alterna entre os filtros, baixa... + open_dropdown('(Todos os Valores de Colunas)') + open_box('Anos Iniciais') + # alterna entre os filtros, baixa... + alternate_years_and_download(stage=etapa, + level='Anos Iniciais') + open_dropdown('Anos Iniciais') + open_box('Anos Finais') + # alterna entre os filtros, baixa... + alternate_years_and_download(stage=etapa, + level='Anos Finais') + open_dropdown(etapa) + else: + # alterna entre os filtros e baixa + alternate_years_and_download(stage=etapa, + level='') + + open_dropdown('Ensino Médio') # posicao original + open_box('Educação Básica') + + +def define_categories(): + open_dropdown('Localização') + open_box('Cor/Raça', delay=4) + + +def switch_filters(): + switch_stages() + + +def main(): + define_categories() + switch_filters() + + +main() + +navegador.quit() +print("Extraction complete!") diff --git a/WebScrapper/requirements.txt b/WebScrapper/requirements.txt new file mode 100644 index 0000000..f2a6dcb --- /dev/null +++ b/WebScrapper/requirements.txt @@ -0,0 +1,170 @@ +# This file may be used to create an environment using: +# $ conda create --name --file +# platform: linux-64 +_libgcc_mutex=0.1=conda_forge +_openmp_mutex=4.5=2_gnu +annotated-types=0.6.0=py312h06a4308_0 +anyio=4.3.0=pypi_0 +appdirs=1.4.4=pyhd3eb1b0_0 +argon2-cffi=23.1.0=pypi_0 +argon2-cffi-bindings=21.2.0=pypi_0 +arrow=1.3.0=pypi_0 +asttokens=2.4.1=pypi_0 +async-lru=2.0.4=pypi_0 +attrs=23.1.0=py312h06a4308_0 +babel=2.14.0=pypi_0 +beautifulsoup4=4.12.2=py312h06a4308_0 +blas=1.0=mkl +bleach=6.1.0=pypi_0 +bottleneck=1.3.7=py312ha883a20_0 +brotli-python=1.0.9=py312h6a678d5_8 +bzip2=1.0.8=h5eee18b_5 +ca-certificates=2024.7.2=h06a4308_0 +certifi=2024.7.4=py312h06a4308_0 +cffi=1.16.0=pypi_0 +charset-normalizer=2.0.4=pyhd3eb1b0_0 +comm=0.2.2=pypi_0 +debugpy=1.8.1=pypi_0 +decorator=5.1.1=pypi_0 +defusedxml=0.7.1=pypi_0 +deprecation=2.1.0=pyhd3eb1b0_0 +et_xmlfile=1.1.0=py312h06a4308_1 +exceptiongroup=1.2.0=py312h06a4308_0 +executing=2.0.1=pypi_0 +expat=2.6.2=h6a678d5_0 +fastjsonschema=2.19.1=pypi_0 +fqdn=1.5.1=pypi_0 +gotrue=2.6.0=pyhd8ed1ab_0 +greenlet=3.0.1=py312h6a678d5_0 +h11=0.14.0=py312h06a4308_0 +h2=4.1.0=pypi_0 +hpack=4.0.0=pypi_0 +httpcore=1.0.5=pypi_0 +httpx=0.27.0=pypi_0 +hyperframe=6.0.1=pypi_0 +icu=73.1=h6a678d5_0 +idna=3.7=py312h06a4308_0 +intel-openmp=2023.1.0=hdb19cb5_46306 +ipykernel=6.29.4=pypi_0 +ipython=8.24.0=pypi_0 +isoduration=20.11.0=pypi_0 +jedi=0.19.1=pypi_0 +jinja2=3.1.3=pypi_0 +json5=0.9.25=pypi_0 +jsonpointer=2.4=pypi_0 +jsonschema=4.22.0=pypi_0 +jsonschema-specifications=2023.12.1=pypi_0 +jupyter-client=8.6.1=pypi_0 +jupyter-core=5.7.2=pypi_0 +jupyter-events=0.10.0=pypi_0 +jupyter-lsp=2.2.5=pypi_0 +jupyter-server=2.14.0=pypi_0 +jupyter-server-terminals=0.5.3=pypi_0 +jupyterlab=4.1.8=pypi_0 +jupyterlab-pygments=0.3.0=pypi_0 +jupyterlab-server=2.27.1=pypi_0 +ld_impl_linux-64=2.38=h1181459_1 +libffi=3.4.4=h6a678d5_1 +libgcc-ng=13.2.0=hc881cc4_6 +libgomp=13.2.0=hc881cc4_6 +libstdcxx-ng=11.2.0=h1234567_1 +libuuid=1.41.5=h5eee18b_0 +libxml2=2.10.4=hfdd30dd_2 +libxslt=1.1.37=h5eee18b_1 +lxml=4.9.3=py312hdbbb534_0 +markupsafe=2.1.5=pypi_0 +matplotlib-inline=0.1.7=pypi_0 +mistune=3.0.2=pypi_0 +mkl=2023.1.0=h213fc3f_46344 +mkl-service=2.4.0=py312h5eee18b_1 +mkl_fft=1.3.8=py312h5eee18b_0 +mkl_random=1.2.4=py312hdb19cb5_0 +nbclient=0.10.0=pypi_0 +nbconvert=7.16.4=pypi_0 +nbformat=5.10.4=pypi_0 +ncurses=6.4=h6a678d5_0 +nest-asyncio=1.6.0=pypi_0 +notebook=7.1.3=pypi_0 +notebook-shim=0.2.4=pypi_0 +numexpr=2.8.7=py312hf827012_0 +numpy=1.26.4=py312hc5e2394_0 +numpy-base=1.26.4=py312h0da6c21_0 +openpyxl=3.1.5=py312h5eee18b_0 +openssl=3.0.14=h5eee18b_0 +outcome=1.1.0=pyhd3eb1b0_0 +overrides=7.7.0=pypi_0 +packaging=24.0=pypi_0 +pandas=2.2.2=py312h526ad5a_0 +pandocfilters=1.5.1=pypi_0 +parso=0.8.4=pypi_0 +pexpect=4.9.0=pypi_0 +pip=23.3.1=py312h06a4308_0 +platformdirs=4.2.1=pypi_0 +postgrest=0.16.9=pyhd8ed1ab_0 +prometheus-client=0.20.0=pypi_0 +prompt-toolkit=3.0.43=pypi_0 +psutil=5.9.8=pypi_0 +psycopg2=2.9.9=pypi_0 +ptyprocess=0.7.0=pypi_0 +pure-eval=0.2.2=pypi_0 +pycparser=2.22=pypi_0 +pydantic=2.5.3=py312h06a4308_0 +pydantic-core=2.14.6=py312hb02cf49_0 +pygments=2.17.2=pypi_0 +pysocks=1.7.1=py312h06a4308_0 +python=3.12.3=h996f2a0_0 +python-dateutil=2.9.0post0=py312h06a4308_2 +python-dotenv=1.0.1=pypi_0 +python-json-logger=2.0.7=pypi_0 +python-tzdata=2023.3=pyhd3eb1b0_0 +pytz=2024.1=py312h06a4308_0 +pyyaml=6.0.1=pypi_0 +pyzmq=26.0.3=pypi_0 +readline=8.2=h5eee18b_0 +realtime=1.0.0=pyhd8ed1ab_0 +referencing=0.35.1=pypi_0 +requests=2.31.0=py312h06a4308_1 +rfc3339-validator=0.1.4=pypi_0 +rfc3986-validator=0.1.1=pypi_0 +rpds-py=0.18.0=pypi_0 +selenium=4.23.1=pyhd8ed1ab_0 +selenium-manager=4.23.0=h9678756_0 +send2trash=1.8.3=pypi_0 +setuptools=68.2.2=py312h06a4308_0 +six=1.16.0=pyhd3eb1b0_1 +sniffio=1.3.0=py312h06a4308_0 +sortedcontainers=2.4.0=pyhd3eb1b0_0 +soupsieve=2.5=py312h06a4308_0 +sqlalchemy=2.0.30=py312h5eee18b_0 +sqlite=3.45.3=h5eee18b_0 +stack-data=0.6.3=pypi_0 +storage3=0.7.7=pyhd8ed1ab_0 +strenum=0.4.15=pyhd8ed1ab_0 +supabase=2.5.3=pyhd8ed1ab_0 +supafunc=0.4.7=pyhd8ed1ab_0 +tbb=2021.8.0=hdb19cb5_0 +terminado=0.18.1=pypi_0 +tinycss2=1.3.0=pypi_0 +tk=8.6.12=h1ccaba5_0 +tornado=6.4=pypi_0 +tqdm=4.66.2=py312he106c6f_0 +traitlets=5.14.3=pypi_0 +trio=0.24.0=py312h06a4308_0 +trio-websocket=0.11.1=pyhd8ed1ab_0 +types-python-dateutil=2.9.0.20240316=pypi_0 +typing-extensions=4.9.0=py312h06a4308_1 +typing_extensions=4.9.0=py312h06a4308_1 +tzdata=2024a=h04d1e81_0 +uri-template=1.3.0=pypi_0 +urllib3=2.1.0=py312h06a4308_1 +wcwidth=0.2.13=pypi_0 +webcolors=1.13=pypi_0 +webdriver-manager=4.0.1=pypi_0 +webdrivermanager=0.10.0=pyhd8ed1ab_0 +webencodings=0.5.1=pypi_0 +websocket-client=1.8.0=py312h06a4308_0 +websockets=10.4=py312h5eee18b_1 +wheel=0.41.2=py312h06a4308_0 +wsproto=1.2.0=pyhd8ed1ab_0 +xz=5.4.6=h5eee18b_0 +zlib=1.2.13=h5eee18b_0