save and update

This commit is contained in:
Jakub Miazek 2023-03-28 22:11:22 +02:00
parent 64089c9d5b
commit 30267c782a

View File

@ -1,7 +1,7 @@
from typing import Any from typing import Any
from fastapi import HTTPException, status from fastapi import HTTPException, status
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError, IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.ext.declarative import as_declarative, declared_attr from sqlalchemy.ext.declarative import as_declarative, declared_attr
@ -67,3 +67,18 @@ class Base:
setattr(self, k, v) setattr(self, k, v)
await self.save(db_session) await self.save(db_session)
async def save_or_update(self, db: AsyncSession):
# TODO: this will be successor of update meth
_success = False
try:
db.add(self)
_success = await db.commit()
return _success
except IntegrityError as exception:
if not _success:
# TODO: check if exception is instance of class 'asyncpg.exceptions.UniqueViolationError'
return await db.merge(self)
else:
raise exception
finally:
await db.close()