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
答案 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)
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
参数。