es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice SQL dentro de un Cog de Discord.

No quería recurrir a todos ustedes, pero estoy perdido… Tengo un bot de Discord en Python y estoy usando SQL para almacenar datos en todo el bot. En el archivo principal, logré que el SQL funcionara para que se conectara solo una vez en lugar de tener múltiples conexiones. ¿Cómo lo haría en el COG?

Lo que he intentado:

def __init__(self, bot):
    self.bot = bot
    self.db = asyncpg.create_pool(dsn='postgres://postgres:Password1@localhost:5434/discord')

@commands.Cog.listener()
async def on_ready(self):
    print("¡Level Online!")

@commands.command()
async def test(self, ctx):
    guild = ctx.author.guild
    member = ctx.author
    self.db.execute('INSERT INTO levels(member, guild_id) VALUES ($1, $2)', member.id, guild.id)

¡Por cierto, esto está en una clase! Estoy abierto a cualquier idea, por favor y gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que la conexión SQL se realiza solo una vez en un COG, se puede crear un método separado en la clase COG que configure la conexión a la base de datos y luego llamar a ese método en el método __init__ del COG. Aquí hay un ejemplo:

    import asyncpg
    
    class MyCog(commands.Cog):
        def __init__(self, bot):
            self.bot = bot
            self.db = None
            self.setup_db()
    
        def setup_db(self):
            if self.db is None:
                self.db = await asyncpg.create_pool(dsn='postgres://postgres:Password1@localhost:5434/discord')
    
        @commands.Cog.listener()
        async def on_ready(self):
            print("¡Nivel en línea!")
    
        @commands.command()
        async def test(self, ctx):
            guild = ctx.author.guild
            member = ctx.author
            await self.db.execute('INSERT INTO levels(member, guild_id) VALUES ($1, $2)', member.id, guild.id)
    

    En este ejemplo, se llama al método setup_db en el método __init__ del COG para crear el grupo de conexiones de la base de datos. Luego, los métodos on_ready y test usan el grupo de conexiones para ejecutar consultas SQL. Cuando se descarga el COG, el grupo de conexiones se cerrará automáticamente.

    Tenga en cuenta que este ejemplo asume que la biblioteca asyncpg se está utilizando para la conexión a la base de datos. Si está utilizando una biblioteca diferente, el código de configuración puede ser ligeramente diferente.

Comments are closed.