Задать вопрос
@Hyap5757
Познающий мир

Как можно сравнить полученный ботом id пользователя с каждым id из БД SQLite с помощью цикла?

Делаю бота на aiogram, использую базу данных SQLite.
Мне нужно проверить полученный id пользователя с каждым id уже имеющимся в базе данных с помощью цикла(просто как иначе я не знаю, если знаете подскажите пожалуйста как можно быстрее это сделать). Если проверяемый id будет соответствовать тому, что в базе, то пользователю бот отправляет сообщение вроде: "вы успешно авторизовались, вот ваш профиль", если же айди не соответствует ни одному из - то есть нет такого в базе данных, то бот переходит к процессу регистрации пользователя и там уже пойдут FSMcontext, стейты и тд. Мне нужно понять как реализовать проверку айди, весь инет перерыл, везде примеры с import sqlite3, cursor.fetchal, но ничего не работает, может я что-то не так делаю.

@user_registration_router.message(StateFilter(None), CommandStart())
async def cmd_start_dating(message: types.Message, state: FSMContext):
    con = sqlite3.connect("data_base.db")
    cursor = con.cursor()
    cursor.execute("SELECT user_id FROM userdatabase")

    user_id_massive = cursor.fetchall()  

    if message.from_user.id in [user_id[0] for user_id in user_id_massive]:
        await message.answer('Вы успешно авторизировались!')
        await message.answer('Вы в главном меню!')
    else:
         await message.answer('К сожалению Вы ещё не зарегистрированы в сервисе!')
         time.sleep(1.5)        
         await state.update_data(user_id=message.from_user.id)
         await message.answer('Укажите ваш пол ⬇️', reply_markup=GENDER_KB)
         await state.set_state(DataUsers.gender)
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по информационной безопасности
    9 месяцев
    Далее
Решения вопроса 2
@TheDigitalMadness
Программист
Смотри: у тебя в user_id_massive содержаться id не в цифровом виде, а в кортеже. Тогда, тебе достаточно просто привести message.from_user.id к кортежу
current_user_id = tuple([message.from_user.id])
if current_user_id in user_id_massive:
    ....
Ответ написан
@Hyap5757 Автор вопроса
Познающий мир
Так, ну я нашёл способ решения моей проблемы, в итоге пришлось прибегнуть к WHERE и обошёлся я без циклов, чуваки, кто жоско в этом шарит, оцените пожалуйста, может ли мой способ являться оптимальным решением проблемы авторизации? Потому что как бы и наличие айди в бд проверяет и после пользователю выдаёт что нужно.
@user_registration_router.message(StateFilter(None), CommandStart())
async def cmd_start_dating(message: types.Message, state: FSMContext):
    con = sqlite3.connect("data_base.db")
    cursor = con.cursor()
    cursor.execute(f"SELECT user_id FROM userdatabase WHERE user_id = {message.from_user.id}")

    user_id_massive = cursor.fetchall() 

    if user_id_massive:
        await message.answer('Вы успешно авторизировались!')
        await message.answer('Вы в главном меню!')   
    else:
        await message.answer('К сожалению Вы ещё не зарегистрированы в сервисе!')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы