TinyDB执行更新操作仅缓存数据未更新JSON文档问题求解
问题根因
你代码里有两个核心错误导致数据没有落地到JSON文件:
- 表名引用错误:你在
database.py中定义存储角色数据的表是characterTable,但update_character函数里调用的是不存在的userTable执行更新操作,所有更新请求都没打到正确的表上,自然不会修改磁盘上的JSON文件。 - TinyDB默认开启内存缓存,部分场景下缓存未主动刷入磁盘也会导致文件更新延迟,重启后数据恢复旧版本。
修复方案
1. 修正update_character函数的表引用
把database.py里的update_character函数修改为如下内容:
def update_character(id, changedValues): # 把错误的userTable替换为正确的characterTable updated_count = characterTable.update(changedValues, (Row.id == id)) # 主动触发缓存落盘,确保修改立刻写入JSON文件 characterTable.storage.flush() return updated_count
2. (可选)关闭内存缓存彻底避免异步落盘问题
如果还是偶发数据丢失,可以在初始化TinyDB的时候关闭内存缓存,所有修改直接写入磁盘:
from tinydb.storages import JSONStorage characterTable = TinyDB( os.path.join(script_dir, 'data/characters.json'), storage=JSONStorage, cache_size=0 # 关闭内存缓存 )
3. 补充校验
你可以在调用update_character后打印返回的更新行数,确认修改已经生效:
# 在handler.py的update_character调用后添加校验逻辑 update_count = database.update_character(character["id"], {"data": character["data"]}) print(f"成功更新{update_count}条角色记录")
内容的提问来源于stack exchange,提问作者Seth Alexander
相关产品推荐
相关产品推荐

