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_dir = Path.home() / '.local' / 'share' / 'controles' db_dir.mkdir(parents=True, exist_ok=True) db_path = db_dir / 'database.db' # Configurar SQLite com opções para melhor concorrência engine = create_engine( f'sqlite:///{db_path}', 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_connection(): """Retorna uma nova sessão do banco de dados com PRAGMAs configuradas""" session = Session() try: # Configurar SQLite para melhor tratamento de concorrência session.execute(text("PRAGMA journal_mode=WAL")) session.execute(text("PRAGMA busy_timeout=5000")) return session except Exception as e: session.rollback() session.close() raise e