如何获取所有标签名称?

时间:2021-05-25 22:06:54

标签: python postgresql discord.py

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

2 个答案:

答案 0 :(得分:0)

我假设您使用的是 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', ... ]"

答案 1 :(得分:0)

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 参数。