python-3.x - 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))
解决方案
推荐阅读
- android - 我想根据其中文本的大小制作具有动态宽度的 RecyclerView
- amazon-web-services - 如何使用 Cloudformation 在 AWS 上解析免费套餐 RHEL AMI ID?
- windows - 无法在 Windows7 中运行 npm 包
- python - 在微信中检索 mediaid 时出现 503 错误代码?
- keycloak - 将 auth0 与 keycloak 一起使用
- angularjs - 使用AngularJS控制器在第三个文本框中的文本框中显示两个数字的总和
- c - curl:RSA_padding_check_PKCS1_type_1:无效填充
- google-chrome - 为什么 Chrome 开发者工具的网络标签显示的大小比下载的文件大小要小很多?
- c++ - 无法在 C++ 中为停车场 OOP 声明抽象类型的变量
- c - 如何在 mmaped 内存中删除脏页并为快速 munmap 做准备?