首页 > 解决方案 > TinyDb 在执行更新时缓存数据,但从不更新 json 文档

问题描述

我在一个项目中使用 TinyDB 来存储不和谐机器人的信息。每当用户更新他们的“滚动”时,更改的值会被缓存,但文档不会更新以反映更改。这会导致每次机器人重新启动时都不会保存数据。

用户数据如下所示:

{
        "id": "some guid",
        "userId": discordId,
        "guildId": guildId,
        "data": {
            "rolls": {},
            "bonus": {}
        },
        "active": true,
        "first": "john",
        "last": "doe"
    }

我有一个命令应该向“rolls”字典添加键和值。这是代码:

处理程序.py

def save_dice(ctx, key, value):
    for x in ['+','-','*','/']:
         value = x.join(value.split(x))
         value = value.replace(x, f" {x} ")
    character = database.get_active_character(ctx.author.id, ctx.guild.id)
    character["data"]["rolls"][key] = value
    database.update_character(character["id"], {"data": character["data"]})
    return f"roll \"{key}\" set to \"{value}\""

数据库.py

from tinydb import TinyDB, Query
from difflib import SequenceMatcher
from pprint import pprint
from uuid import uuid4
import json
import os

script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in
Row = Query()

...

# id: uuid
# guildId: discord guildid
# userId: discord userid
# data: dict containing character stuff
# active: bool
# first: first name
# last: last name
characterTable = TinyDB(os.path.join(script_dir, 'data/characters.json'))

...

def update_character(id, changedValues):
    userTable.update(changedValues, (Row.id == id))

标签: python-3.xdiscord.pytinydb

解决方案


推荐阅读