Python PostreSQL пагинация работает неправильно, помогите

Всем привет. У меня возникла вот такая проблема с пагинацией (код представлен ниже): раздел с мифическими картами не показывает карты с rarety mythical, а раздел с лимитированными, который должен показывать карты с limited, показывает карты с mythical.

Код:

@dp.callback_query(F.data == 'btn_mythical_cards') 
async def mythical_cardlist_launcher(callback: CallbackQuery):
    await callback.message.delete()
    conn = psycopg2.connect(dbname=db_name, user=db_user, password=db_pass, host=db_host)
    cursor = conn.cursor()
    cursor.execute("select universe from users where id= %s", (callback.from_user.id,))
    db_checker = cursor.fetchone()[0]

    rarety = 'mythical'

    if db_checker in avaible_uni:
        cursor.execute('select name from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
        db_checker = cursor.fetchone()

        if db_checker is not None:
            cursor.execute('delete from tempdata where id = %s', (callback.from_user.id,))
            conn.commit()
            page = 0
            cursor.execute('select count(distinct name) from cards where rarety = %s and cardowner = %s', (rarety, callback.from_user.id,))
            num = cursor.fetchone()[0]
            cursor.execute('select distinct id, name, hp, attack, power, price, img from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
            card_list = cursor.fetchall()
            cursor.execute('insert into tempdata (id, data) values (%s, %s)', (callback.from_user.id, page))
            conn.commit()

            if num != 1:
                builder = InlineKeyboardBuilder() #333
                if page != 0:
                    builder.add(InlineKeyboardButton(text='?', callback_data='prev_mythical'))

                builder.add(InlineKeyboardButton(text=f'{page + 1}/{num}', callback_data='num')) 

                if page + 1 != num:
                    builder.add(InlineKeyboardButton(text='?', callback_data='next_mythical'))
                else:
                    pass

                builder.width = 3

                await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Мифическая ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=builder.as_markup())
            else:
                await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Мифическая ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=kb.only_card_mythical)
        else:
            await callback.answer('♦️ У тебя еще нет ни одной карты этой редкости, но не волнуйся, удача еще улыбнется тебе;)', show_alert=True)
    else:
        await callback.answer('Неверный ID вселенной. Пожалуйста, обратитесь в поддержку!', show_alert=True)

@dp.callback_query(F.data == 'next_mythical')
async def mythical_cardlist_launcher_next(callback: CallbackQuery):
    await callback.message.delete()
    conn = psycopg2.connect(dbname=db_name, user=db_user, password=db_pass, host=db_host)
    cursor = conn.cursor()

    rarety = 'mythical'

    cursor.execute('select data from tempdata where id = %s', (callback.from_user.id,))
    prev_page = int(cursor.fetchone()[0])
    cursor.execute('delete from tempdata where id = %s', (callback.from_user.id,))
    conn.commit()
    cursor.execute('select count(distinct name) from cards where rarety = %s and cardowner = %s', (rarety, callback.from_user.id,))
    num = cursor.fetchone()[0]

    if prev_page + 1 < num:
        cursor.execute('select distinct id, name, hp, attack, power, price, img from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
        card_list = cursor.fetchall()

        page = prev_page + 1
        cursor.execute('insert into tempdata (id, data) values (%s, %s)', (callback.from_user.id, page))
        conn.commit()

        builder = InlineKeyboardBuilder() #333
        if page != 0:
            builder.add(InlineKeyboardButton(text='?', callback_data='prev_mythical'))

        builder.add(InlineKeyboardButton(text=f'{page + 1}/{num}', callback_data='num')) 

        if page + 1 != num:
            builder.add(InlineKeyboardButton(text='?', callback_data='next_mythical'))
        else:
            pass

        builder.width = 3

        await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Мифическая ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=builder.as_markup())
    else:
        await callback.answer('List out of range', show_alert=True)

@dp.callback_query(F.data == 'prev_mythical')
async def mythical_cardlist_launcher_prev(callback: CallbackQuery):
    await callback.message.delete()
    conn = psycopg2.connect(dbname=db_name, user=db_user, password=db_pass, host=db_host)
    cursor = conn.cursor()

    rarety = 'mythical'

    cursor.execute('select data from tempdata where id = %s', (callback.from_user.id,))
    prev_page = int(cursor.fetchone()[0])
    cursor.execute('delete from tempdata where id = %s', (callback.from_user.id,))
    conn.commit()
    cursor.execute('select count(distinct name) from cards where rarety = %s and cardowner = %s', (rarety, callback.from_user.id,))
    num = cursor.fetchone()[0]

    if prev_page - 1 < num:
        cursor.execute('select distinct id, name, hp, attack, power, price, img from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
        card_list = cursor.fetchall()

        page = prev_page - 1
        cursor.execute('insert into tempdata (id, data) values (%s, %s)', (callback.from_user.id, page))
        conn.commit()

        builder = InlineKeyboardBuilder() #333
        if page != 0:
            builder.add(InlineKeyboardButton(text='?', callback_data='prev_mythical'))

        builder.add(InlineKeyboardButton(text=f'{page + 1}/{num}', callback_data='num')) 

        if page + 1 != num:
            builder.add(InlineKeyboardButton(text='?', callback_data='next_mythical'))
        else:
            pass

        builder.width = 3

        await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Мифическая ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=builder.as_markup())
    else:
        await callback.answer('List out of range', show_alert=True)

@dp.callback_query(F.data == 'btn_limited_cards') 
async def limited_cardlist_launcher(callback: CallbackQuery):
    await callback.message.delete()
    conn = psycopg2.connect(dbname=db_name, user=db_user, password=db_pass, host=db_host)
    cursor = conn.cursor()
    cursor.execute("select universe from users where id= %s", (callback.from_user.id,))
    db_checker = cursor.fetchone()[0]

    rarety = 'limited'

    if db_checker in avaible_uni:
        cursor.execute('select name from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
        db_checker = cursor.fetchone()

        if db_checker is not None:
            cursor.execute('delete from tempdata where id = %s', (callback.from_user.id,))
            conn.commit()
            page = 0
            cursor.execute('select count(distinct name) from cards where rarety = %s and cardowner = %s', (rarety, callback.from_user.id,))
            num = cursor.fetchone()[0]
            cursor.execute('select distinct id, name, hp, attack, power, price, img from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
            card_list = cursor.fetchall()
            cursor.execute('insert into tempdata (id, data) values (%s, %s)', (callback.from_user.id, page))
            conn.commit()

            if num != 1:
                builder = InlineKeyboardBuilder() #333
                if page != 0:
                    builder.add(InlineKeyboardButton(text='?', callback_data='prev_limited'))

                builder.add(InlineKeyboardButton(text=f'{page + 1}/{num}', callback_data='num')) 

                if page + 1 != num:
                    builder.add(InlineKeyboardButton(text='?', callback_data='next_limited'))
                else:
                    pass

                builder.width = 3

                await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Лимитированная ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=builder.as_markup())
            else:
                await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Лимитированная ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=kb.only_card_limited)
        else:
            await callback.answer('♦️ Для получения лимитированной карты тебе нужны 4 осколка. Как только ты их получишь, то перейди в меню крафта из осколков ?', show_alert=True)
    else:
        await callback.answer('Неверный ID вселенной. Пожалуйста, обратитесь в поддержку!', show_alert=True)

@dp.callback_query(F.data == 'next_limited')
async def limited_cardlist_launcher_next(callback: CallbackQuery):
    await callback.message.delete()
    conn = psycopg2.connect(dbname=db_name, user=db_user, password=db_pass, host=db_host)
    cursor = conn.cursor()

    rarety = 'limited'

    cursor.execute('select data from tempdata where id = %s', (callback.from_user.id,))
    prev_page = int(cursor.fetchone()[0])
    cursor.execute('delete from tempdata where id = %s', (callback.from_user.id,))
    conn.commit()
    cursor.execute('select count(distinct name) from cards where rarety = %s and cardowner = %s', (rarety, callback.from_user.id,))
    num = cursor.fetchone()[0]

    if prev_page + 1 < num:
        cursor.execute('select distinct id, name, hp, attack, power, price, img from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
        card_list = cursor.fetchall()

        page = prev_page + 1
        cursor.execute('insert into tempdata (id, data) values (%s, %s)', (callback.from_user.id, page))
        conn.commit()

        builder = InlineKeyboardBuilder() #333
        if page != 0:
            builder.add(InlineKeyboardButton(text='?', callback_data='prev_limited'))

        builder.add(InlineKeyboardButton(text=f'{page + 1}/{num}', callback_data='num')) 

        if page + 1 != num:
            builder.add(InlineKeyboardButton(text='?', callback_data='next_limited'))
        else:
            pass

        builder.width = 3

        await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Лимитированная ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=builder.as_markup())
    else:
        await callback.answer('List out of range', show_alert=True)

@dp.callback_query(F.data == 'prev_limited')
async def limited_cardlist_launcher_prev(callback: CallbackQuery):
    await callback.message.delete()
    conn = psycopg2.connect(dbname=db_name, user=db_user, password=db_pass, host=db_host)
    cursor = conn.cursor()

    rarety = 'limited'

    cursor.execute('select data from tempdata where id = %s', (callback.from_user.id,))
    prev_page = int(cursor.fetchone()[0])
    cursor.execute('delete from tempdata where id = %s', (callback.from_user.id,))
    conn.commit()
    cursor.execute('select count(distinct name) from cards where rarety = %s and cardowner = %s', (rarety, callback.from_user.id,))
    num = cursor.fetchone()[0]

    if prev_page - 1 < num:
        cursor.execute('select distinct id, name, hp, attack, power, price, img from cards where cardowner =%s and rarety = %s', (callback.from_user.id, rarety,))
        card_list = cursor.fetchall()

        page = prev_page - 1
        cursor.execute('insert into tempdata (id, data) values (%s, %s)', (callback.from_user.id, page))
        conn.commit()

        builder = InlineKeyboardBuilder() #333
        if page != 0:
            builder.add(InlineKeyboardButton(text='?', callback_data='prev_limited'))

        builder.add(InlineKeyboardButton(text=f'{page + 1}/{num}', callback_data='num')) 

        if page + 1 != num:
            builder.add(InlineKeyboardButton(text='?', callback_data='next_limited'))
        else:
            pass

        builder.width = 3

        await callback.message.answer_video(card_list[page][6], caption=f'? <b>{card_list[page][1]}</b>\n\n? <b>ID карты:</b> {card_list[page][0]}\n⭐️ <b>Редкость:</b> Лимитированная ?\n\n<b>❤️ Здоровье:</b> {card_list[page][2]}\n<b>⚔️ Атака:</b> {card_list[page][3]}\n<b>? Мощь:</b> {card_list[page][4]}\n\n<b>? Ценность:</b> {card_list[page][5]}', reply_markup=builder.as_markup())
    else:
        await callback.answer('List out of range', show_alert=True)

Пожалуйста, подскажите как решить проблему


Ответы (0 шт):