sqlite 查询中缺少 len()
Missing len() within sqlite query
我一直在尝试根据经验对用户进行排名,尽管在调用命令等级时,我似乎收到缺少 len() 的类型错误
错误:命令引发异常:TypeError:类型 'sqlite3.Cursor' 的对象没有 len()
我正在寻求帮助 class(尽管这也是我第一次使用 classes),在其中,它调用了 len,它给我一个错误。
感谢大家的帮助!
class HelpMenu(ListPageSource):
def __init__(self, ctx, data):
self.ctx = ctx
super().__init__(data, per_page = 10)
async def write_page(self, menu, fields=[]):
offset = (menu.current_page * self.per_page) + 1
len_data = len(self.entries)
embed = Embed(title="Server XP Leaderboard",
colour=self.ctx.author.colour)
embed.set_thumbnail(url = self.ctx.guild.icon_url)
embed.set_footer(text = f"{offset:,} - {min(len_data, offset+self.per_page-1):,} of {len_data:, } members.")
for name, value in fields:
embed.add_field(name=name, value=value, inline=False)
return embed
async def format_page(self, menu, entries):
fields = []
for idx, entry in enumerate(entries):
fields.append(("Ranks", "\n".join(f'{idx}. {entry[0]} (XP: {entry[1]} | Level: {entry[2]})')))
return await self.write_page(menu, fields)
class Exp(Cog):
def __init__(self, bot):
self.bot = bot
@command(aliases = ['lvl', 'level'])
async def rank(self, ctx):
db = sqlite3.connect('xpdata.db')
cursor = db.cursor()
# user_id = self.author.id
guild_id = ctx.guild.id
#
# cursor.execute(f'SELECT * FROM xpdata WHERE user_id = {user_id} AND guild_id = {guild_id}')
# for row in cursor.fetchall():
# level_display = row[3]
xp_ranking = cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
#menu
ranking_menu = MenuPages(source=HelpMenu(ctx, xp_ranking))
await ranking_menu.start(ctx)
#await ctx.channel.send('{} is currently level {} and rank {}'.format(ctx.author.mention, level_display))
您没有获取查询结果。
更正此行:
xp_ranking = cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
至
cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
xp_ranking = cursor.fetchall()
我一直在尝试根据经验对用户进行排名,尽管在调用命令等级时,我似乎收到缺少 len() 的类型错误
错误:命令引发异常:TypeError:类型 'sqlite3.Cursor' 的对象没有 len()
我正在寻求帮助 class(尽管这也是我第一次使用 classes),在其中,它调用了 len,它给我一个错误。
感谢大家的帮助!
class HelpMenu(ListPageSource):
def __init__(self, ctx, data):
self.ctx = ctx
super().__init__(data, per_page = 10)
async def write_page(self, menu, fields=[]):
offset = (menu.current_page * self.per_page) + 1
len_data = len(self.entries)
embed = Embed(title="Server XP Leaderboard",
colour=self.ctx.author.colour)
embed.set_thumbnail(url = self.ctx.guild.icon_url)
embed.set_footer(text = f"{offset:,} - {min(len_data, offset+self.per_page-1):,} of {len_data:, } members.")
for name, value in fields:
embed.add_field(name=name, value=value, inline=False)
return embed
async def format_page(self, menu, entries):
fields = []
for idx, entry in enumerate(entries):
fields.append(("Ranks", "\n".join(f'{idx}. {entry[0]} (XP: {entry[1]} | Level: {entry[2]})')))
return await self.write_page(menu, fields)
class Exp(Cog):
def __init__(self, bot):
self.bot = bot
@command(aliases = ['lvl', 'level'])
async def rank(self, ctx):
db = sqlite3.connect('xpdata.db')
cursor = db.cursor()
# user_id = self.author.id
guild_id = ctx.guild.id
#
# cursor.execute(f'SELECT * FROM xpdata WHERE user_id = {user_id} AND guild_id = {guild_id}')
# for row in cursor.fetchall():
# level_display = row[3]
xp_ranking = cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
#menu
ranking_menu = MenuPages(source=HelpMenu(ctx, xp_ranking))
await ranking_menu.start(ctx)
#await ctx.channel.send('{} is currently level {} and rank {}'.format(ctx.author.mention, level_display))
您没有获取查询结果。
更正此行:
xp_ranking = cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
至
cursor.execute(f'SELECT user_id, xp, level FROM xpdata WHERE guild_id = {guild_id} ORDER BY xp DESC')
xp_ranking = cursor.fetchall()