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",
+ " País | \n",
+ " Região | \n",
+ " UF | \n",
+ " Município | \n",
+ " quantidade | \n",
+ " cor_raca | \n",
+ " dependencia_administrativa | \n",
+ " etapa_de_ensino | \n",
+ " ano | \n",
+ " municipio_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Abadia dos Dourados | \n",
+ " 122 | \n",
+ " Branca | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3100104 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Abadia dos Dourados | \n",
+ " 2 | \n",
+ " Não declarada | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3100104 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Abadia dos Dourados | \n",
+ " 80 | \n",
+ " Parda | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3100104 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Abadia dos Dourados | \n",
+ " 7 | \n",
+ " Preta | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3100104 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Abaeté | \n",
+ " 244 | \n",
+ " Branca | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3100203 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 4924 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Volta Grande | \n",
+ " 82 | \n",
+ " Parda | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3172103 | \n",
+ "
\n",
+ " \n",
+ " 4925 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Volta Grande | \n",
+ " 29 | \n",
+ " Preta | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3172103 | \n",
+ "
\n",
+ " \n",
+ " 4926 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Wenceslau Braz | \n",
+ " 70 | \n",
+ " Branca | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3172202 | \n",
+ "
\n",
+ " \n",
+ " 4927 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Wenceslau Braz | \n",
+ " 36 | \n",
+ " Parda | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3172202 | \n",
+ "
\n",
+ " \n",
+ " 4928 | \n",
+ " Brasil | \n",
+ " Sudeste | \n",
+ " MG | \n",
+ " Wenceslau Braz | \n",
+ " 3 | \n",
+ " Preta | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2023 | \n",
+ " 3172202 | \n",
+ "
\n",
+ " \n",
+ "
\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",
+ " País | \n",
+ " Região | \n",
+ " UF | \n",
+ " Município | \n",
+ " quantidade | \n",
+ " cor_raca | \n",
+ " dependencia_administrativa | \n",
+ " etapa_de_ensino | \n",
+ " ano | \n",
+ " municipio_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\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",
+ " ano | \n",
+ " UF | \n",
+ " municipio_id | \n",
+ " nome | \n",
+ " dependencia_administrativa | \n",
+ " aprovacao_EF1 | \n",
+ " aprovacao_EF2 | \n",
+ " aprovacao_EM | \n",
+ " reprovacao_EF1 | \n",
+ " reprovacao_EF2 | \n",
+ " reprovacao_EM | \n",
+ " abandono_EF1 | \n",
+ " abandono_EF2 | \n",
+ " abandono_EM | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 28427 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Total | \n",
+ " 100 | \n",
+ " 94.1 | \n",
+ " 93.5 | \n",
+ " 0 | \n",
+ " 3.7 | \n",
+ " 1.9 | \n",
+ " 0 | \n",
+ " 2.2 | \n",
+ " 4.6 | \n",
+ "
\n",
+ " \n",
+ " 28430 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Estadual | \n",
+ " -- | \n",
+ " 94.1 | \n",
+ " 93.5 | \n",
+ " -- | \n",
+ " 3.7 | \n",
+ " 1.9 | \n",
+ " -- | \n",
+ " 2.2 | \n",
+ " 4.6 | \n",
+ "
\n",
+ " \n",
+ " 28432 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Municipal | \n",
+ " 100 | \n",
+ " -- | \n",
+ " -- | \n",
+ " 0 | \n",
+ " -- | \n",
+ " -- | \n",
+ " 0 | \n",
+ " -- | \n",
+ " -- | \n",
+ "
\n",
+ " \n",
+ " 28435 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Pública | \n",
+ " 100 | \n",
+ " 94.1 | \n",
+ " 93.5 | \n",
+ " 0 | \n",
+ " 3.7 | \n",
+ " 1.9 | \n",
+ " 0 | \n",
+ " 2.2 | \n",
+ " 4.6 | \n",
+ "
\n",
+ " \n",
+ " 28438 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100203 | \n",
+ " Abaeté | \n",
+ " Total | \n",
+ " 99.3 | \n",
+ " 84.7 | \n",
+ " 79 | \n",
+ " 0.6 | \n",
+ " 14.7 | \n",
+ " 7.1 | \n",
+ " 0.1 | \n",
+ " 0.6 | \n",
+ " 13.9 | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 37884 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172103 | \n",
+ " Volta Grande | \n",
+ " Pública | \n",
+ " 95.6 | \n",
+ " 88.4 | \n",
+ " 87.7 | \n",
+ " 4.4 | \n",
+ " 11.6 | \n",
+ " 5.4 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 6.9 | \n",
+ "
\n",
+ " \n",
+ " 37887 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Total | \n",
+ " 96.6 | \n",
+ " 97.7 | \n",
+ " 98.9 | \n",
+ " 3.4 | \n",
+ " 2.3 | \n",
+ " 1.1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 37890 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Estadual | \n",
+ " -- | \n",
+ " 97.7 | \n",
+ " 98.9 | \n",
+ " -- | \n",
+ " 2.3 | \n",
+ " 1.1 | \n",
+ " -- | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 37892 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Municipal | \n",
+ " 96.6 | \n",
+ " -- | \n",
+ " -- | \n",
+ " 3.4 | \n",
+ " -- | \n",
+ " -- | \n",
+ " 0 | \n",
+ " -- | \n",
+ " -- | \n",
+ "
\n",
+ " \n",
+ " 37894 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Pública | \n",
+ " 96.6 | \n",
+ " 97.7 | \n",
+ " 98.9 | \n",
+ " 3.4 | \n",
+ " 2.3 | \n",
+ " 1.1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\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",
+ " ano | \n",
+ " UF | \n",
+ " municipio_id | \n",
+ " Município | \n",
+ " dependencia_administrativa | \n",
+ " etapa_de_ensino | \n",
+ " taxa_de_abandono | \n",
+ " taxa_de_aprovacao | \n",
+ " taxa_de_reprovacao | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Estadual | \n",
+ " EF1 | \n",
+ " None | \n",
+ " None | \n",
+ " None | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Estadual | \n",
+ " EF2 | \n",
+ " 2.2 | \n",
+ " 94.1 | \n",
+ " 3.7 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 4.6 | \n",
+ " 93.5 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Municipal | \n",
+ " EF1 | \n",
+ " 0 | \n",
+ " 100 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Municipal | \n",
+ " EF2 | \n",
+ " None | \n",
+ " None | \n",
+ " None | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 11305 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Pública | \n",
+ " EF2 | \n",
+ " 0 | \n",
+ " 97.7 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " 11306 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Pública | \n",
+ " EM | \n",
+ " 0 | \n",
+ " 98.9 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ " 11307 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Total | \n",
+ " EF1 | \n",
+ " 0 | \n",
+ " 96.6 | \n",
+ " 3.4 | \n",
+ "
\n",
+ " \n",
+ " 11308 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Total | \n",
+ " EF2 | \n",
+ " 0 | \n",
+ " 97.7 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " 11309 | \n",
+ " 2023 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Total | \n",
+ " EM | \n",
+ " 0 | \n",
+ " 98.9 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ "
\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",
+ " ano | \n",
+ " UF | \n",
+ " municipio_id | \n",
+ " Município | \n",
+ " dependencia_administrativa | \n",
+ " etapa_de_ensino | \n",
+ " taxa_de_abandono | \n",
+ " taxa_de_aprovacao | \n",
+ " taxa_de_reprovacao | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Estadual | \n",
+ " EF1 | \n",
+ " None | \n",
+ " None | \n",
+ " None | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Estadual | \n",
+ " EF2 | \n",
+ " 0.7 | \n",
+ " 93.2 | \n",
+ " 6.1 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Estadual | \n",
+ " EM | \n",
+ " 2 | \n",
+ " 91.6 | \n",
+ " 6.4 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Municipal | \n",
+ " EF1 | \n",
+ " 0 | \n",
+ " 100 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ " Municipal | \n",
+ " EF2 | \n",
+ " None | \n",
+ " None | \n",
+ " None | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 11308 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Pública | \n",
+ " EF2 | \n",
+ " 0 | \n",
+ " 96.8 | \n",
+ " 3.2 | \n",
+ "
\n",
+ " \n",
+ " 11309 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Pública | \n",
+ " EM | \n",
+ " 0 | \n",
+ " 97.8 | \n",
+ " 2.2 | \n",
+ "
\n",
+ " \n",
+ " 11310 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Total | \n",
+ " EF1 | \n",
+ " 0 | \n",
+ " 100 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " 11311 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Total | \n",
+ " EF2 | \n",
+ " 0 | \n",
+ " 96.8 | \n",
+ " 3.2 | \n",
+ "
\n",
+ " \n",
+ " 11312 | \n",
+ " 2022 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ " Total | \n",
+ " EM | \n",
+ " 0 | \n",
+ " 97.8 | \n",
+ " 2.2 | \n",
+ "
\n",
+ " \n",
+ "
\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",
+ " etapa_de_ensino | \n",
+ " ano | \n",
+ " dependencia_administrativa | \n",
+ " taxa_de_aprovacao | \n",
+ " taxa_de_reprovacao | \n",
+ " taxa_de_abandono | \n",
+ " municipio_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\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",
+ " municipio_id | \n",
+ " ano | \n",
+ " dependencia_administrativa | \n",
+ " taxa_de_aprovacao | \n",
+ " taxa_de_reprovacao | \n",
+ " taxa_de_abandono | \n",
+ " etapa_de_ensino | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\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",
+ " ano | \n",
+ " dependencia_administrativa | \n",
+ " taxa_de_aprovacao | \n",
+ " taxa_de_reprovacao | \n",
+ " taxa_de_abandono | \n",
+ " etapa_de_ensino | \n",
+ " municipio_id | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\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",
+ " UF | \n",
+ " id | \n",
+ " nome | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 28354 | \n",
+ " MG | \n",
+ " 3100104 | \n",
+ " Abadia dos Dourados | \n",
+ "
\n",
+ " \n",
+ " 28365 | \n",
+ " MG | \n",
+ " 3100203 | \n",
+ " Abaeté | \n",
+ "
\n",
+ " \n",
+ " 28378 | \n",
+ " MG | \n",
+ " 3100302 | \n",
+ " Abre Campo | \n",
+ "
\n",
+ " \n",
+ " 28390 | \n",
+ " MG | \n",
+ " 3100401 | \n",
+ " Acaiaca | \n",
+ "
\n",
+ " \n",
+ " 28403 | \n",
+ " MG | \n",
+ " 3100500 | \n",
+ " Açucena | \n",
+ "
\n",
+ " \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " 37797 | \n",
+ " MG | \n",
+ " 3171808 | \n",
+ " Virginópolis | \n",
+ "
\n",
+ " \n",
+ " 37811 | \n",
+ " MG | \n",
+ " 3171907 | \n",
+ " Virgolândia | \n",
+ "
\n",
+ " \n",
+ " 37819 | \n",
+ " MG | \n",
+ " 3172004 | \n",
+ " Visconde do Rio Branco | \n",
+ "
\n",
+ " \n",
+ " 37833 | \n",
+ " MG | \n",
+ " 3172103 | \n",
+ " Volta Grande | \n",
+ "
\n",
+ " \n",
+ " 37844 | \n",
+ " MG | \n",
+ " 3172202 | \n",
+ " Wenceslau Braz | \n",
+ "
\n",
+ " \n",
+ "
\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