fix(db): 修复数据库会话获取失败时的处理逻辑
在 `db_query` 和 `db_save` 函数中,增加了对数据库会话(session)获取失败的检查。当无法获取会话时,记录错误日志并返回 None 或空列表,避免了后续操作因会话为空而引发的异常。 同时,修复了 `proactive_thinker_executor` 中因数据库查询返回 None 而导致处理 `action_history` 时出错的问题。
This commit is contained in:
committed by
Windpicker-owo
parent
64fd711cd5
commit
0e0dedcdf7
@@ -124,6 +124,10 @@ async def db_query(
|
|||||||
raise ValueError("query_type must be 'get', 'create', 'update', 'delete' or 'count'")
|
raise ValueError("query_type must be 'get', 'create', 'update', 'delete' or 'count'")
|
||||||
|
|
||||||
async with get_db_session() as session:
|
async with get_db_session() as session:
|
||||||
|
if not session:
|
||||||
|
logger.error("[SQLAlchemy] 无法获取数据库会话")
|
||||||
|
return None if single_result else []
|
||||||
|
|
||||||
if query_type == "get":
|
if query_type == "get":
|
||||||
query = select(model_class)
|
query = select(model_class)
|
||||||
|
|
||||||
@@ -221,7 +225,7 @@ async def db_query(
|
|||||||
# 删除记录
|
# 删除记录
|
||||||
affected_rows = 0
|
affected_rows = 0
|
||||||
for record in records_to_delete:
|
for record in records_to_delete:
|
||||||
session.delete(record)
|
await session.delete(record)
|
||||||
affected_rows += 1
|
affected_rows += 1
|
||||||
|
|
||||||
return affected_rows
|
return affected_rows
|
||||||
@@ -274,6 +278,9 @@ async def db_save(
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
async with get_db_session() as session:
|
async with get_db_session() as session:
|
||||||
|
if not session:
|
||||||
|
logger.error("[SQLAlchemy] 无法获取数据库会话")
|
||||||
|
return None
|
||||||
# 如果提供了key_field和key_value,尝试更新现有记录
|
# 如果提供了key_field和key_value,尝试更新现有记录
|
||||||
if key_field and key_value is not None:
|
if key_field and key_value is not None:
|
||||||
if hasattr(model_class, key_field):
|
if hasattr(model_class, key_field):
|
||||||
|
|||||||
@@ -128,7 +128,9 @@ class ProactiveThinkerExecutor:
|
|||||||
limit=3,
|
limit=3,
|
||||||
order_by=["-time"]
|
order_by=["-time"]
|
||||||
)
|
)
|
||||||
action_history_context = "\n".join([f"- {a['action_data']}" for a in action_history]) if action_history else "无"
|
action_history_context = "无"
|
||||||
|
if isinstance(action_history, list):
|
||||||
|
action_history_context = "\n".join([f"- {a['action_data']}" for a in action_history if isinstance(a, dict)]) or "无"
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"person_id": person_id,
|
"person_id": person_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user