如何为Discord Python bot保持AIOSQLite数据库的打开状态?

2024-06-02 06:33:48 发布

您现在位置:Python中文网/ 问答频道 /正文

如何让我用AIOSQLite库创建的数据库为我的DiscordPY bot打开,这样我就不必在创建的每个命令和事件上不断创建新连接并关闭它们


Tags: 命令数据库bot事件aiosqlitediscordpy
1条回答
网友
1楼 · 发布于 2024-06-02 06:33:48

经过进一步研究,我发现创建一个异步线程,使数据库连接保持全局,可以使数据库始终保持打开状态。我还发现关闭数据库不是必需的,但是可以这样做,因为异步线程将继续打开它,然后再打开它

class EternalAsynchronousDatabase(Thread):
    """
    The asynchronous thread.
    """
    def run(self):
        loop = new_event_loop()
        loop.run_until_complete(self._run())
        loop.close()
    async def _run(self):
        global db
        db = await connect(discord_bot.name.lower().replace(' ', '_') + '.db')

asyncdb = EternalAsynchronousDatabase()
asyncdb.start()

try:
    asyncdb.join()
except KeyboardInterrupt:
    pass

然后,它总是可以像这样等待:

@bot.command()
async def register(ctx):
    await db.executescript(
        'CREATE TABLE IF NOT EXISTS users (current_username TEXT, discriminator INTEGER, id INTEGER);'
        'INSERT INTO users VALUES ("?", ?, ?)', (ctx.author.name, ctx.author.discriminator, ctx.author.id)
    )

相关问题 更多 >