frendlix
@frendlix
Event-destroy

Как правильно сделать повтор цикла if else?

Ребят привет!
Никак не могу разобраться (разбираюсь сам - сильно не бейте)

Есть такой кусок кода (комменты в нём - это вопросы и пояснения)
#Соеденилис с БД - тут всё ок
users = sqlite3.connect('users.db')
	cur = users.cursor()
	try:
		player_nick = (message.text)
		cur.execute(f"""SELECT nickname FROM users WHERE user_id= {message.from_user.id}""")
		res = cur.fetchone() #Вытащили никнейм из БД по user_id - тоже ок
		cur.execute(f"""SELECT nickname FROM users LIKE %?""")
		all_nick = cur.fetchall() #Вот тут что-то идёт не так и он не выбирает все ники из колонки nickname
		while(res == None) or (res == all_nick): #Цикл повторяется - пока поле nickname пустое или содержит уже имеющийся ник пользователя
			if (res == None) and (res == all_nick): #Если поле nickname пустое и не содержит таких же ников, то добавляет новый ник из сообщения пользователя. Тут всё окей, но нет проверки на "совпадение ников из БД", из-за проблемы описанной выше.
				cur.execute(f"""INSERT INTO users (user_id, user_name, user_lastname, username, nickname, age) VALUES ('{message.from_user.id}', '{message.from_user.first_name}', '{message.from_user.last_name}', '{message.from_user.username}', '{player_nick}', '18')""")
				users.commit() #Добавили, записали
			elif res == all_nick:
				await message.answer(f'Ник уже занят...\nВыбери другой!', parse_mode='HTML') #Если ник уже занят - выводит сообщение, что он занят. Но если написать ник снова, то дальше ничего не происходит, хотя вроде он должен снова проверить ник на совпадение в БД и перезаписать, если совпадений нет.
			else:
				cur.execute(f"""UPDATE users SET nickname = '{player_nick}' WHERE user_id = {message.from_user.id}""") #Переписывает ник, если человек захотел его поменять. Всё ок
				users.commit()
	except:
		pass


Второй день кручу это всё туда сюда, но ничего не выходит.
Подскажите - помогите пожалуйста!
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
@Develper
Достëшь строку у которой колонка nickname = запросу, если такой нет значит ник не занят
s_nick = "Искомый Ник"
cur.execute(f"""SELECT * FROM users WHERE nickname={s_nick}""")
check = cur.fetchone()
if check:
    print("ник занят")
else:
    **обновление ника**
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы