如何获取所有标记名?

2024-10-03 06:21:03 发布

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

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


Tags: fromselfclientiddbnamesfetchawait
2条回答

我假设您正在使用asyncpg

在asyncpg中,fetch协同程序返回一个asyncpg.Record对象列表,在这种情况下,每个记录对象都有一个trigger字段。因此,您希望迭代DB fetch结果中的每个记录,并使用“trigger”字段的值

为了方便起见,您只需将fetchresults列表中的每个项替换为其触发器字段的值,这可以在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', ... ]"

fetch在asyncpg中,返回一个可下标的记录对象,我们可以简单地使用列表理解将其转换为字符串

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

相关问题 更多 >