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

TinyDB操作inventory表调用search/insert/update报AttributeError求助

问题排查与修复方案

根因定位

报错提示'Command' object has no attribute 'search'说明你代码中的inventory变量指向的是Discord.py的命令对象,而非你预期的TinyDB表对象,核心问题是变量名冲突,和TinyDB数据库的表本身没有关系。
两个可能的触发原因:

  • 你在代码后续位置定义了名为inventory的Discord前缀命令/斜杠命令,覆盖了之前初始化的TinyDB表变量
  • 你当前的TinyDB表初始化写法不符合官方规范,可能导致表对象初始化失败

修复步骤

  1. 首先修正TinyDB表的初始化写法,同时修改表变量名避免和Discord命令重名:
db = TinyDB('testdb.json')
Inventory = Query()
# 用实例化的db对象调用table方法,同时将表变量名改为不会和命令冲突的名称
inventory_table = db.table('inventory')
  1. 将所有业务代码中调用表方法的位置,统一替换为新的表变量名,同时优化空结果判断逻辑:
if c_cards_rdm == 2:
    image = 'https://cdn.discordapp.com/attachments/873309423555194910/873309521693536306/common_square.png'
    result = inventory_table.search(Inventory.name == "common_square")
    # 直接判断列表是否为空,无需转字符串比较
    if not result:
        inventory_table.insert({"name":"common_square","quantity":"1","atk":"0","def":"35"})
    else:
        inventory_table.update({"quantity":f"{str(int(result[0]['quantity'])+1)}"}, 
        Inventory.name == "common_square")
  1. 如果你不需要保留名为inventory的Discord命令,也可以直接修改该命令的名称,不需要调整数据库变量名也可解决冲突。

内容的提问来源于stack exchange,提问作者onur_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:42:01