From d763896c0cfbb772addf9020d7323337a9637b9f Mon Sep 17 00:00:00 2001 From: 283375 Date: Wed, 6 Sep 2023 01:10:47 +0800 Subject: [PATCH] feat(db): `Score` related modify methods --- src/arcaea_offline/database.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/arcaea_offline/database.py b/src/arcaea_offline/database.py index 4775389..91ad683 100644 --- a/src/arcaea_offline/database.py +++ b/src/arcaea_offline/database.py @@ -1,5 +1,5 @@ import logging -from typing import List, Optional, Type, Union +from typing import Iterable, List, Optional, Type, Union from sqlalchemy import Engine, func, inspect, select from sqlalchemy.orm import DeclarativeBase, InstrumentedAttribute, sessionmaker @@ -245,6 +245,30 @@ class Database(metaclass=Singleton): result = session.scalar(stmt) return result + def insert_score(self, score: Score): + with self.sessionmaker() as session: + session.add(score) + session.commit() + + def insert_scores(self, scores: Iterable[Score]): + with self.sessionmaker() as session: + session.add_all(scores) + session.commit() + + def update_score(self, score: Score): + if score.id is None: + raise ValueError( + "Cannot determine which score to update, please specify `score.id`" + ) + with self.sessionmaker() as session: + session.merge(score) + session.commit() + + def delete_score(self, score: Score): + with self.sessionmaker() as session: + session.delete(score) + session.commit() + # endregion def get_b30(self):