refactor(database): 将同步数据库操作迁移为异步操作

将整个项目的数据库操作从同步模式迁移为异步模式,主要涉及以下修改:

- 将 `with get_db_session()` 改为 `async with get_db_session()`
- 将同步的 SQLAlchemy 查询方法改为异步执行
- 更新相关的方法签名,添加 async/await 关键字
- 修复由于异步化导致的并发问题和性能问题

这些修改提高了数据库操作的并发性能,避免了阻塞主线程,提升了系统的整体响应能力。涉及修改的模块包括表情包管理、反提示注入统计、用户封禁管理、记忆系统、消息存储等多个核心组件。

BREAKING CHANGE: 所有涉及数据库操作的方法现在都需要使用异步调用,同步调用将不再工作
This commit is contained in:
Windpicker-owo
2025-09-28 15:42:30 +08:00
parent 7508d542f2
commit 9836d317b8
35 changed files with 1337 additions and 1068 deletions

View File

@@ -8,6 +8,7 @@ import traceback
from typing import List, Dict, Optional, Any
from datetime import datetime
import numpy as np
from sqlalchemy import select
from src.common.logger import get_logger
from src.config.config import global_config
@@ -610,14 +611,13 @@ class BotInterestManager:
from src.common.database.sqlalchemy_database_api import get_db_session
import orjson
with get_db_session() as session:
async with get_db_session() as session:
# 查询最新的兴趣标签配置
db_interests = (
session.query(DBBotPersonalityInterests)
.filter(DBBotPersonalityInterests.personality_id == personality_id)
db_interests = (await session.execute(
select(DBBotPersonalityInterests)
.where(DBBotPersonalityInterests.personality_id == personality_id)
.order_by(DBBotPersonalityInterests.version.desc(), DBBotPersonalityInterests.last_updated.desc())
.first()
)
)).scalars().first()
if db_interests:
logger.debug(f"在数据库中找到兴趣标签配置, 版本: {db_interests.version}")
@@ -700,13 +700,12 @@ class BotInterestManager:
# 序列化为JSON
json_data = orjson.dumps(tags_data)
with get_db_session() as session:
async with get_db_session() as session:
# 检查是否已存在相同personality_id的记录
existing_record = (
session.query(DBBotPersonalityInterests)
.filter(DBBotPersonalityInterests.personality_id == interests.personality_id)
.first()
)
existing_record = (await session.execute(
select(DBBotPersonalityInterests)
.where(DBBotPersonalityInterests.personality_id == interests.personality_id)
)).scalars().first()
if existing_record:
# 更新现有记录
@@ -731,19 +730,17 @@ class BotInterestManager:
last_updated=interests.last_updated,
)
session.add(new_record)
session.commit()
await session.commit()
logger.info(f"✅ 成功创建兴趣标签配置,版本: {interests.version}")
logger.info("✅ 兴趣标签已成功保存到数据库")
# 验证保存是否成功
with get_db_session() as session:
saved_record = (
session.query(DBBotPersonalityInterests)
.filter(DBBotPersonalityInterests.personality_id == interests.personality_id)
.first()
)
session.commit()
async with get_db_session() as session:
saved_record = (await session.execute(
select(DBBotPersonalityInterests)
.where(DBBotPersonalityInterests.personality_id == interests.personality_id)
)).scalars().first()
if saved_record:
logger.info(f"✅ 验证成功数据库中存在personality_id为 {interests.personality_id} 的记录")
logger.info(f" 版本: {saved_record.version}")