diff --git a/.env.example b/.env.example index faff2e1..179a4bd 100644 --- a/.env.example +++ b/.env.example @@ -10,3 +10,9 @@ SAUDE_DOCS_URL= ECONOMIA_RENDA_DOCS_URL= SANEAMENTO_DOCS_URL= HIDRAULICA_DOCS_URL= +DB_HOST= +DB_DATABASE= +DB_USER= +DB_PASSWORD= +DB_PORT= + diff --git a/config.py b/config.py index 82bf05e..6e23319 100644 --- a/config.py +++ b/config.py @@ -34,6 +34,11 @@ def get_config_value(name: str) -> str | None: ECONOMIA_RENDA_DOCS_URL = get_config_value("ECONOMIA_RENDA_DOCS_URL") SANEAMENTO_DOCS_URL = get_config_value("SANEAMENTO_DOCS_URL") HIDRAULICA_DOCS_URL = get_config_value("HIDRAULICA_DOCS_URL") +DB_HOST = get_config_value("DB_HOST") +DB_DATABASE = get_config_value("DB_DATABASE") +DB_USER = get_config_value("DB_USER") +DB_PASSWORD = get_config_value("DB_PASSWORD") +DB_PORT = get_config_value("DB_PORT") MACROTEMAS = { "demografia": { @@ -148,4 +153,4 @@ def require_config_value(value: str | None, env_name: str) -> str: status_code=500, detail=f"{env_name} não configurado. Defina no arquivo .config, .env ou nas variáveis de ambiente.", ) - return value \ No newline at end of file + return value diff --git a/requirements.txt b/requirements.txt index 47e8ddb..1e622e1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ fastapi matplotlib weasyprint dotenv +psycopg2-binary diff --git a/utils/database.py b/utils/database.py new file mode 100644 index 0000000..50a1803 --- /dev/null +++ b/utils/database.py @@ -0,0 +1,49 @@ +import psycopg2 +from config import DB_HOST +from config import DB_DATABASE +from config import DB_USER +from config import DB_PASSWORD +from config import DB_PORT + +def get_connection(): + try: + conexao = psycopg2.connect( + host= DB_HOST, + database=DB_DATABASE, + user=DB_USER, + password=DB_PASSWORD, + port=DB_PORT, + connect_timeout=5 + ) + + cursor = conexao.cursor() + cursor.execute("SELECT version();") + versao_db = cursor.fetchone() + print("Conexão bem-sucedida!") + print(f"Versão do banco de dados: {versao_db[0]}") + + cursor.close() + conexao.close() + + except psycopg2.OperationalError as e: + print(f"Ocorreu um erro operacional (provavelmente rede ou credenciais): {e}") + except Exception as e: + print(f"Erro: {e}") + +def test_connection(): + try: + conn = get_connection() + cursor = conn.cursor() + cursor.execute("SELECT version();") + version = cursor.fetchone() + cursor.close() + conn.close() + return {"status": "connected", "version": version[0]} + except Exception as e: + return {"status": "error", "message": str(e)} + +def main(): + test_connection() + +if __name__ == "__main__": + main()