TinyDB操作inventory表调用search/insert/update报AttributeError求助
问题排查与修复方案
根因定位
报错提示'Command' object has no attribute 'search'说明你代码中的inventory变量指向的是Discord.py的命令对象,而非你预期的TinyDB表对象,核心问题是变量名冲突,和TinyDB数据库的表本身没有关系。
两个可能的触发原因:
- 你在代码后续位置定义了名为
inventory的Discord前缀命令/斜杠命令,覆盖了之前初始化的TinyDB表变量 - 你当前的TinyDB表初始化写法不符合官方规范,可能导致表对象初始化失败
修复步骤
- 首先修正TinyDB表的初始化写法,同时修改表变量名避免和Discord命令重名:
db = TinyDB('testdb.json') Inventory = Query() # 用实例化的db对象调用table方法,同时将表变量名改为不会和命令冲突的名称 inventory_table = db.table('inventory')
- 将所有业务代码中调用表方法的位置,统一替换为新的表变量名,同时优化空结果判断逻辑:
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")
- 如果你不需要保留名为
inventory的Discord命令,也可以直接修改该命令的名称,不需要调整数据库变量名也可解决冲突。
内容的提问来源于stack exchange,提问作者onur_
相关产品推荐
相关产品推荐

