From 1f2956e72505d6ede611dbc537c8c52ce03c2ae3 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Tue, 23 Sep 2025 14:05:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(db):=20=E9=80=82=E9=85=8D=20SQLAlchemy=202.?= =?UTF-8?q?0=20API=20=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新了与数据库交互的代码,以适配 SQLAlchemy 2.0 引入的 API 变更,解决相关的废弃警告和异步调用问题。 主要变更包括: - 使用 `scalars().first()` 替代已废弃的 `scalar()` 方法。 - 在获取所有标量结果时显式调用 `.all()`。 - 对异步引擎 `get_engine()` 的调用进行 `await`。 - 移除了向 Inspector 方法(如 `get_table_names`)传递多余的 `conn` 参数。 --- src/chat/message_receive/chat_stream.py | 4 ++-- src/common/database/db_migration.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/chat/message_receive/chat_stream.py b/src/chat/message_receive/chat_stream.py index 6360928b1..c42654aa3 100644 --- a/src/chat/message_receive/chat_stream.py +++ b/src/chat/message_receive/chat_stream.py @@ -249,7 +249,7 @@ class ChatManager: # 检查数据库中是否存在 async def _db_find_stream_async(s_id: str): async with get_db_session() as session: - return (await session.execute(select(ChatStreams).where(ChatStreams.stream_id == s_id))).scalar() + return (await session.execute(select(ChatStreams).where(ChatStreams.stream_id == s_id))).scalars().first() model_instance = await _db_find_stream_async(stream_id) @@ -396,7 +396,7 @@ class ChatManager: async def _db_load_all_streams_async(): loaded_streams_data = [] async with get_db_session() as session: - for model_instance in (await session.execute(select(ChatStreams))).scalars(): + for model_instance in (await session.execute(select(ChatStreams))).scalars().all(): user_info_data = { "platform": model_instance.user_platform, "user_id": model_instance.user_id, diff --git a/src/common/database/db_migration.py b/src/common/database/db_migration.py index b7f56abd9..aedff3676 100644 --- a/src/common/database/db_migration.py +++ b/src/common/database/db_migration.py @@ -18,7 +18,7 @@ async def check_and_migrate_database(): - 自动为现有表创建缺失的索引。 """ logger.info("正在检查数据库结构并执行自动迁移...") - engine = get_engine() + engine = await get_engine() async with engine.connect() as connection: # 在同步上下文中运行inspector操作 @@ -28,7 +28,7 @@ async def check_and_migrate_database(): inspector = await connection.run_sync(get_inspector) # 在同步lambda中传递inspector - db_table_names = await connection.run_sync(lambda conn: set(inspector.get_table_names(conn))) + db_table_names = await connection.run_sync(lambda conn: set(inspector.get_table_names())) # 1. 首先处理表的创建 tables_to_create = [] @@ -60,7 +60,7 @@ async def check_and_migrate_database(): try: # 检查并添加缺失的列 db_columns = await connection.run_sync( - lambda conn: {col["name"] for col in inspector.get_columns(table_name, conn)} + lambda conn: {col["name"] for col in inspector.get_columns(table_name)} ) model_columns = {col.name for col in table.c} missing_columns = model_columns - db_columns @@ -100,7 +100,7 @@ async def check_and_migrate_database(): # 检查并创建缺失的索引 db_indexes = await connection.run_sync( - lambda conn: {idx["name"] for idx in inspector.get_indexes(table_name, conn)} + lambda conn: {idx["name"] for idx in inspector.get_indexes(table_name)} ) model_indexes = {idx.name for idx in table.indexes} missing_indexes = model_indexes - db_indexes