-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Description
三次提交问题是否能优化
\Langchain-Chatchat\libs\chatchat-server\chatchat\server\db\session.py
中
@contextmanager
def session_scope() -> Session:
"""上下文管理器用于自动获取 Session, 避免错误"""
session = SessionLocal()
try:
yield session
session.commit() 一次提交
except:
session.rollback()
raise
finally:
session.close()
def with_session(f):
@wraps(f)
def wrapper(*args, **kwargs):
with session_scope() as session:
try:
result = f(session, *args, **kwargs)
session.commit() 二次提交
return result
except:
session.rollback()
raise
return wrapper
在用时
@with_session
def update_message(session, message_id, response: str = None, metadata: Dict = None):
"""
更新已有的聊天记录
"""
m = get_message_by_id(message_id)
if m is not None:
if response is not None:
m.response = response
if isinstance(metadata, dict):
m.meta_data = metadata
session.add(m)
session.commit() 三次提交
return m.id