You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:54:03