fix(db): 适配 SQLAlchemy 2.0 API 变更

更新了与数据库交互的代码,以适配 SQLAlchemy 2.0 引入的 API 变更,解决相关的废弃警告和异步调用问题。

主要变更包括:
- 使用 `scalars().first()` 替代已废弃的 `scalar()` 方法。
- 在获取所有标量结果时显式调用 `.all()`。
- 对异步引擎 `get_engine()` 的调用进行 `await`。
- 移除了向 Inspector 方法(如 `get_table_names`)传递多余的 `conn` 参数。
This commit is contained in:
minecraft1024a
2025-09-23 14:05:16 +08:00
parent d0b4b8bb8b
commit 1f2956e725
2 changed files with 6 additions and 6 deletions

View File

@@ -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,

View File

@@ -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