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)
Пожалуйста, подскажите как решить проблему