【问题标题】:How to get all tag names?如何获取所有标签名称?
【发布时间】:2021-08-14 04:19:38
【问题描述】:
names = await self.client.db.fetch("SELECT trigger FROM tags WHERE guild_id = $1", ctx.guild.id)
await ctx.send(names)
[<Record trigger='hoe'>, <Record trigger='guild'>, <Record trigger='err'>, <Record trigger='ikr'>, <Record trigger='ikr'>, <Record trigger='ew'>, <Record trigger='raid'>, <Record trigger='brake'>, <Record trigger="Spen's profile">]

如何只获取所有标签名称,如 ikr、guild、ew

【问题讨论】:

    标签: python postgresql discord.py


    【解决方案1】:

    asyncpg 中的fetch 返回一个可下标的 Record 对象,我们可以简单地使用列表推导转换为字符串。

    names = await self.client.db.fetch("SELECT trigger FROM tags WHERE guild_id = $1", ctx.guild.id)
    names = [x['trigger'] for x in names]
    
    await ctx.send(names)
    #names will be ['ikr', 'guild', 'ew'] in your case
    

    参考资料:

    注意:如果您想对所有提取使用相同的东西,我建议查看record_class 参数以进行连接或提取。

    【讨论】:

      【解决方案2】:

      我假设您使用的是asyncpg

      在 asyncpg 中,fetch 协程返回一个 asyncpg.Record 对象列表,在这种情况下,每个 Record 对象都有一个 trigger 字段。因此,您希望遍历 DB 提取结果中的每条记录,并使用“触发器”字段的值。

      为方便起见,您可以将获取结果列表中的每个项目替换为其触发字段的值,这可以在 Python 中通过枚举简单地完成:

      names = await self.client.db.fetch("SELECT trigger FROM tags WHERE guild_id = $1", ctx.guild.id)
      for index, record in enumerate(names):
          names[index] = record["trigger"]
      await ctx.send(names)
      # should send "['hoe', 'guild', 'err', ... ]"
      

      【讨论】:

      • 它发送一个列表,我希望它只发送诸如 hoe、guild 和 err 之类的名称
      • 如果您的意思是 Discord 消息是“hoe, guild, err, ...”,那么您可以使用 Python 的 string.join():", ".join(names) 将返回一个您想要的字符串 – await ctx.send(", ".join(names)) 也是如此
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      相关资源
      最近更新 更多