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 ff24bd8148
commit 08ef960947
35 changed files with 1180 additions and 1053 deletions

13
bot.py
View File

@@ -185,12 +185,12 @@ class MaiBotMain(BaseMain):
check_eula()
logger.info("检查EULA和隐私条款完成")
def initialize_database(self):
async def initialize_database(self):
"""初始化数据库"""
logger.info("正在初始化数据库连接...")
try:
initialize_sql_database(global_config.database)
await initialize_sql_database(global_config.database)
logger.info(f"数据库连接初始化成功,使用 {global_config.database.database_type} 数据库")
except Exception as e:
logger.error(f"数据库连接初始化失败: {e}")
@@ -211,11 +211,11 @@ class MaiBotMain(BaseMain):
self.main_system = MainSystem()
return self.main_system
def run(self):
async def run(self):
"""运行主程序"""
self.setup_timezone()
self.check_and_confirm_eula()
self.initialize_database()
await self.initialize_database()
return self.create_main_system()
@@ -225,14 +225,14 @@ if __name__ == "__main__":
try:
# 创建MaiBotMain实例并获取MainSystem
maibot = MaiBotMain()
main_system = maibot.run()
# 创建事件循环
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
# 异步初始化数据库表结构
# 异步初始化数据库表结构
main_system = loop.run_until_complete(maibot.run())
loop.run_until_complete(maibot.initialize_database_async())
# 执行初始化和任务调度
loop.run_until_complete(main_system.initialize())
@@ -269,3 +269,4 @@ if __name__ == "__main__":
# 在程序退出前暂停,让你有机会看到输出
# input("按 Enter 键退出...") # <--- 添加这行
sys.exit(exit_code) # <--- 使用记录的退出码