Spaces:
Sleeping
Sleeping
| """ | |
| 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 | |