Создание таблицы с помощью SQLITE и пропуск записей при выводе в диссонанс

#python #sqlite #discord.py

Вопрос:

У меня возникла проблема, когда я перечисляю пользователей из своей базы данных.

Первоначально команда работала нормально, как показано на фотографии ниже Как вы видите здесь, таблица лидеров отображается правильно

Для этого я использовал простую строку кода, чтобы пропустить идентификатор пользователя, если = Нет. Хотя, когда я недавно запустил своего бота на своем домашнем сервере, я заметил, что у меня возникла другая проблема. Ниже приведен код для разбитого меню.


Это последняя версия, и она сломана. При этом используется тот же код, что и в таблице лидеров выше, она только что была переименована

Это последняя версия, и она сломана

 class GlobalXpMenu(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="Global 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):
 

Ниже приведен код, который я использовал для своего первоначального исправления. Если бы кто-нибудь мог помочь, это было бы фантастически. Спасибо

         def get_table_rows():
            for index , (user_id, xp) in enumerate(entries, start = 1):
                user = self.ctx.bot.get_user(user_id)
                if user is None:
                    db = sqlite3.connect('xpdata.db')
                    cursor = db.cursor()
                    cursor.execute(f'DELETE FROM xpdata WHERE user_id={user_id}')
                    # If no user with the current 'user_id' exists, skip it.

                    continue
 

Остальная часть кода таблицы.

                 yield f"{index}. {user.name} (XP: {xp} )n"

        fields = []

        table = "n".join(get_table_rows())
        fields.append(("Ranks" , table))
        return await self.write_page(menu, fields)

 

Комментарии:

1. Я думаю, что схема базы данных все еще более старая, возможно, вам потребуется повторно запустить базу данных