Jammerr
@Jammerr
Python Developer

Почему переменную принимает как None?

В таблице у меня есть 1 строка с пустым city и 1 строка с не пустым city, каждому присвоено разное user_id

При выполнении кода с пустым city вызывается if curr.fetchone() is None (верно), но почему оно так же вызывается с не пустым city? curr.fetchone() = ('Rivne',), оно априори не ровняется None

В чем ошибка?
curr.execute(f'SELECT city FROM users WHERE user_id={id}')
print(curr.fetchone())
if curr.fetchone() is None:
   await jam.answer('<b>Введи своє місто:</b> \n\n<i>Доступні міста: \nВінниця, Дніпро, Житомир, Запоріжжя, Івано-Франківськ, Київ, Кропивницький, Луцьк, Львів, Миколаїв, Одеса, Полтава, Рівне, Суми, Тернопіль,  Ужгород, Харків, Херсон, Хмельницький, Черкаси, Чернігів, Чернівці</i>', parse_mode='HTML')
   await Jammer.get_city.set()
else:
   await jam.answer('Введи назву препарату: ')
   await Jammer.get_name_preparat.set()
  • Вопрос задан
  • 83 просмотра
Пригласить эксперта
Ответы на вопрос 1
@antares4045
метод fetchone меняет положение курсора: соответственно если, как вы и утверждаете, для любого id не более одной записи, выведя в консоль строку и не сохранив результат никуда вы, вызвав ещё раз fetchone, гарантировано получаете None

надо так

curr.execute(f'SELECT city FROM users WHERE user_id={id}')
result = curr.fetchone() 
print(result )
if result  is None:
   await jam.answer('<b>Введи своє місто:</b> \n\n<i>Доступні міста: \nВінниця, Дніпро, Житомир, Запоріжжя, Івано-Франківськ, Київ, Кропивницький, Луцьк, Львів, Миколаїв, Одеса, Полтава, Рівне, Суми, Тернопіль,  Ужгород, Харків, Херсон, Хмельницький, Черкаси, Чернігів, Чернівці</i>', parse_mode='HTML')
   await Jammer.get_city.set()
else:
   await jam.answer('Введи назву препарату: ')
   await Jammer.get_name_preparat.set()


ну или не принтить
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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