35 lines
1020 B
Python
35 lines
1020 B
Python
|
|
from sqlalchemy import text
|
||
|
|
from models.entities.base import engine, SessionLocal
|
||
|
|
|
||
|
|
class DatabaseService:
|
||
|
|
"""Serviço para gerenciar conexões com o banco de dados"""
|
||
|
|
|
||
|
|
@staticmethod
|
||
|
|
def get_db_connection():
|
||
|
|
"""Retorna uma nova sessão do banco de dados"""
|
||
|
|
db = SessionLocal()
|
||
|
|
|
||
|
|
try:
|
||
|
|
# Configurar SQLite para melhor tratamento de concorrência
|
||
|
|
db.execute(text("PRAGMA journal_mode=WAL"))
|
||
|
|
db.execute(text("PRAGMA busy_timeout=5000"))
|
||
|
|
return db
|
||
|
|
except:
|
||
|
|
db.close()
|
||
|
|
raise
|
||
|
|
|
||
|
|
@staticmethod
|
||
|
|
def execute_query(query, params=None):
|
||
|
|
"""
|
||
|
|
Executa uma query usando SQLAlchemy
|
||
|
|
"""
|
||
|
|
session = DatabaseService.get_db_connection()
|
||
|
|
try:
|
||
|
|
result = session.execute(query, params)
|
||
|
|
session.commit()
|
||
|
|
return result
|
||
|
|
except Exception as e:
|
||
|
|
session.rollback()
|
||
|
|
raise e
|
||
|
|
finally:
|
||
|
|
session.close()
|