import logging from sqlalchemy.exc import DBAPIError, IntegrityError, NoResultFound from src.db import db log = logging.getLogger(__name__) class QueryWrapper: session = db.session @staticmethod def handle_exceptions(err): db_error_msg = err.args[0] log.debug(f'{db_error_msg}') return {"error": db_error_msg} @classmethod def _execute(cls, query, commit=True): result = cls.session.execute(query) if commit: cls.session.commit() return result @classmethod def insert(cls, query): try: result = cls._execute(query) except (IntegrityError, DBAPIError) as err: return cls.handle_exceptions(err) else: if result.inserted_primary_key[0]: return {"id": result.inserted_primary_key[0]} else: return {"is_insert": result.is_insert} @classmethod def delete(cls, query): try: return cls._execute(query) except (IntegrityError, DBAPIError) as err: return cls.handle_exceptions(err) @classmethod def select(cls, query, many=False): try: result = cls._execute(query, commit=False) result = getattr(result.scalars(), "all" if many else "first")() except NoResultFound: result = {} return result