File size: 2,793 Bytes
88b683e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"""
Funções para gerenciamento de banco de dados e processamento de CSV
"""
import os
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.types import DateTime, Integer, Float
from langchain_community.utilities import SQLDatabase
import logging
from typing import Optional

from utils.config import SQL_DB_PATH

# FUNÇÃO REMOVIDA: create_engine_and_load_db
# Esta função foi substituída pela nova arquitetura de nós
# Use: csv_processing_node.py + database_node.py

def create_engine_from_processed_dataframe(processed_df: pd.DataFrame, sql_types: dict, sql_db_path: str = SQL_DB_PATH):
    """
    Cria engine SQLAlchemy a partir de DataFrame já processado
    NOVA VERSÃO - usa processamento genérico

    Args:
        processed_df: DataFrame já processado
        sql_types: Dicionário com tipos SQL para as colunas
        sql_db_path: Caminho para o banco SQLite

    Returns:
        SQLAlchemy Engine
    """
    logging.info("Criando banco de dados a partir de DataFrame processado...")
    engine = create_engine(f"sqlite:///{sql_db_path}")

    logging.info("[DEBUG] Tipos das colunas processadas:")
    logging.info(processed_df.dtypes)

    # Salva no banco SQLite
    processed_df.to_sql("tabela", engine, index=False, if_exists="replace", dtype=sql_types)
    logging.info(f"Banco de dados SQL criado com sucesso! {len(processed_df)} registros salvos")
    return engine

def create_sql_database(engine) -> SQLDatabase:
    """
    Cria objeto SQLDatabase do LangChain a partir de uma engine
    
    Args:
        engine: SQLAlchemy Engine
        
    Returns:
        SQLDatabase do LangChain
    """
    return SQLDatabase(engine=engine)

def get_sample_data(engine, limit: int = 10) -> pd.DataFrame:
    """
    Obtém dados de amostra do banco para contexto
    
    Args:
        engine: SQLAlchemy Engine
        limit: Número de linhas para retornar
        
    Returns:
        DataFrame com dados de amostra
    """
    try:
        return pd.read_sql_query(f"SELECT * FROM tabela LIMIT {limit}", engine)
    except Exception as e:
        logging.error(f"Erro ao obter dados de amostra: {e}")
        return pd.DataFrame()

def validate_database(engine) -> bool:
    """
    Valida se o banco de dados está funcionando corretamente
    
    Args:
        engine: SQLAlchemy Engine
        
    Returns:
        True se válido, False caso contrário
    """
    try:
        # Testa uma query simples
        result = pd.read_sql_query("SELECT COUNT(*) as count FROM tabela", engine)
        count = result.iloc[0]['count']
        logging.info(f"Banco validado: {count} registros encontrados")
        return count > 0
    except Exception as e:
        logging.error(f"Erro na validação do banco: {e}")
        return False