33 lines
991 B
Python
33 lines
991 B
Python
from sqlalchemy import create_engine
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.orm import sessionmaker
|
|
from pathlib import Path
|
|
import os
|
|
|
|
# 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"""
|
|
session = Session()
|
|
try:
|
|
return session
|
|
except Exception as e:
|
|
session.rollback()
|
|
raise e |