如何实现Discord机器人数据库查询结果每行单独换行展示?
优化Discord机器人scoredetail命令的查询结果展示
要解决查询结果可读性差的问题,你需要遍历查询返回的每条记录,将其格式化为易读的字符串并用换行符分隔,同时修正空结果的判断逻辑(fetchall()在无数据时返回空列表而非None)。
修改后的完整代码:
@commands.command() async def scoredetail(self, ctx): async with aiosqlite.connect("members.db") as db: async with db.execute( 'SELECT Punktestand, Klasse, Zeit FROM Mitglieder WHERE ID = ?', (ctx.author.id,)) as cursor: result = await cursor.fetchall() if not result: # 修正空结果判断,fetchall()返回空列表而非None await ctx.send(f"{ctx.author.mention} hat noch keine Punkte!") return # 格式化每条记录为易读字符串 formatted_results = [] for punktestand, klasse, zeit in result: formatted_line = f"- Punktestand: {punktestand} | Klasse: {klasse} | Zeit: {zeit}" formatted_results.append(formatted_line) # 用换行符拼接所有结果,加上标题 message = f"Deine Punkte:\n{'\n'.join(formatted_results)}" await ctx.send(message)
关键改动说明:
- 空结果判断:将
if result is None改为if not result,因为fetchall()在无匹配数据时返回空列表,而非None,原逻辑无法触发无数据提示。 - 结果格式化:遍历查询返回的每个元组,将
Punktestand、Klasse、Zeit字段组合成清晰的单行文本,前缀加-作为列表项标识。 - 换行展示:用
'\n'.join(formatted_results)把所有格式化后的字符串拼接成带换行的内容,发送后每条记录会单独占一行。
内容的提问来源于stack exchange,提问作者user21926969
相关产品推荐
相关产品推荐

