import os from sqlalchemy import create_engine, text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from pathlib import Path # Configurar caminho do banco de dados db_path = Path(__file__).resolve().parents[1] / 'data' / 'database.db' db_path.parent.mkdir(parents=True, exist_ok=True) db_fallback = f'sqlite:///{db_path}' # Configurar SQLite com opções para melhor concorrência engine = create_engine( os.environ.get('DATABASE_URL', db_fallback), connect_args={ 'timeout': 30, # Tempo de espera em segundos 'check_same_thread': False # Permite acesso de múltiplas threads }, pool_pre_ping=True, # Verifica conexão antes de usar pool_recycle=3600 # Recicla conexões após 1 hora ) Session = sessionmaker(bind=engine) Base = declarative_base() def get_db_session(): """Retorna uma nova sessão do banco de dados com PRAGMAs configuradas""" db_session = Session() try: # Configurar SQLite para melhor tratamento de concorrência db_session.execute(text("PRAGMA journal_mode=WAL")) db_session.execute(text("PRAGMA busy_timeout=5000")) return db_session except Exception as e: db_session.rollback() db_session.close() raise e