From 13bd0da5922862fd277a2d741a0c4a0556521508 Mon Sep 17 00:00:00 2001 From: shoucandanghehe Date: Wed, 15 May 2024 04:22:19 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E6=B7=BB=E5=8A=A0=E6=B2=A1=E6=9C=89=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_plugin_tetris_stats/db/__init__.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nonebot_plugin_tetris_stats/db/__init__.py b/nonebot_plugin_tetris_stats/db/__init__.py index 1a06537..1ea8114 100644 --- a/nonebot_plugin_tetris_stats/db/__init__.py +++ b/nonebot_plugin_tetris_stats/db/__init__.py @@ -1,3 +1,4 @@ +from asyncio import Lock from collections.abc import AsyncGenerator from contextlib import asynccontextmanager from datetime import datetime, timezone @@ -72,9 +73,11 @@ async def create_or_update_bind( T = TypeVar('T', 'TETRIOHistoricalData', 'TOPHistoricalData', 'TOSHistoricalData') +lock = Lock() + async def anti_duplicate_add(cls: type[T], model: T) -> None: - async with get_session() as session: + async with lock, get_session() as session: result = ( await session.scalars( select(cls) @@ -88,8 +91,8 @@ async def anti_duplicate_add(cls: type[T], model: T) -> None: if i.data == model.data: logger.debug('Anti duplicate successfully') return - session.add(model) - await session.commit() + session.add(model) + await session.commit() @asynccontextmanager