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

discord.py开发Discord等级机器人时Bot对象无db属性报错解决

解决AttributeError: 'Bot' object has no attribute 'db'错误

你的问题核心是数据库初始化逻辑没有被正确执行,导致bot.db从未被赋值,触发属性不存在的错误。下面是具体修复步骤:

1. 让初始化上下文管理器生效

你定义了initialise异步上下文管理器,但没有将它绑定到Bot的启动流程中。有两种简单的修复方式:

方式一:创建Bot时指定上下文管理器

修改Bot实例的创建代码,添加async_context_manager参数,让Bot启动时自动执行初始化逻辑:

bot = commands.Bot(command_prefix='!', intents=intents, async_context_manager=initialise)

方式二:手动用异步上下文包裹Bot启动

如果你的discord.py版本不支持async_context_manager参数,改用asyncio.run包裹启动逻辑:

import asyncio

async def main():
    async with initialise(), bot:
        await bot.start("你的机器人TOKEN")

asyncio.run(main())

注意:替换原来直接调用bot.run("TOKEN")的代码

2. 修复SQL语句的语法错误

你原有的INSERT语句存在语法错误,参数不应该直接写在SQL字符串里,正确写法是将参数作为第二个参数传入execute方法:

# 错误写法
# cursor = await bot.db.execute("INSERT OR IGNORE INTO guildData (guild_id,user_id,exp) VALUES(?,?,?),(message.guild.id,message.author.id,1))

# 正确写法
cursor = await bot.db.execute(
    "INSERT OR IGNORE INTO guildData (guild_id,user_id,exp) VALUES(?,?,?)",
    (message.guild.id, message.author.id, 1)
)
# 记得提交事务
await bot.db.commit()

这样既修复了语法问题,也避免了SQL注入风险。

额外检查点

  • 确保aiosqlite已正确安装:执行pip install aiosqlite确认依赖存在
  • 初始化完成后,可以在on_ready事件里打印日志验证bot.db是否存在:
    @bot.event
    async def on_ready():
        print(f"Logged in as {bot.user}")
        print(f"Database connected: {hasattr(bot, 'db')}")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:45:14