【发布时间】:2021-05-29 23:29:29
【问题描述】:
所以我有一个机器人,它本质上是一个租赁数据库,用户使用命令!rental,然后输入有关租赁的各种数据,例如姓名、租赁对象、价格、持续时间(以天为单位),然后它计算开始和结束日期。所以我的租赁参数是姓名、租客、价格、持续时间、开始日期和结束日期。然后这些参数会显示在 Discord Embed 中,以便用户可以看到他们已成功创建租借(见图):https://i.imgur.com/zMpIn1K.png
嵌入中表示的数据随后存储在 SQLite3 数据库中,在本例中称为rentals.db。然后我有另一个命令!view,这就是问题发生的地方。我目前只有!view 命令来打印 SQLite3 表中的所有行,这对测试很有用,因此其中一行如下所示:[('Test Name', 'Test Renter Name', 'Test Price', 'Test Duration', 'Start Date', 'End Date')]
我真正想要发生的是当用户输入!view 命令时,我希望表中的所有行都显示在单独的 Discord 嵌入中,因此每个嵌入都是存储的租金之一,因此用户可以看到所有他们的租金。我有一个粗略的想法,我需要对 SQLite3 数据库中的所有行使用循环,但我不确定将数据库信息添加到嵌入中。通常我会根据用户输入创建嵌入,例如我会使用 name = input('What is your name?'),然后在嵌入中它看起来像 embed.add_field(name='Name', value='{}'.format(name)),但我认为我不能在这种情况下使用 {}.format(database info)。
这是!view 命令的粗略入门代码:
if message.content.startswith('!view'):
rows = cursor.execute("SELECT name, renter, duration, price, start, end FROM rental").fetchall()
print(rows)
# By the way I know in this loop that the {} don't do anything, they're just filler spots because I don't know what to put there!
for x in rows:
embed = discord.Embed(title="Rental", color=0x0000FF)
embed.set_thumbnail(url="https://icon-library.com/images/database-png-icon/database-png-icon-22.jpg")
embed.add_field(name='Bot Name:', value='{}', inline=False)
embed.add_field(name='Renter Name:', value='{}', inline=False)
embed.add_field(name='Rental Duration:', value='{} day(s)', inline=False)
embed.add_field(name='Start Date:', value='{}', inline=False)
embed.add_field(name='End Date:', value='{}', inline=False)
embed.set_footer(icon_url='https://pbs.twimg.com/profile_images/1325672283881484289/oaGtVIOD_400x400.png', text='Created by @Expected')
await message.channel.send(embed=embed)
我不确定我是否正确地开始了循环,所以我需要你的指导。无论您是指向我的文档、另一个重复的帖子,还是在这里帮助我,我都会感谢您的帮助!
【问题讨论】:
-
经过几个小时的修补,我自己解决了。使用
for row in rows:,然后每个嵌入值都是行的增量。因此,由于 name 是该行中的第一个对象,它是 row[0],那么renter 是 row[1],等等。
标签: python sqlite discord.py