• Есть ошибка: Таблица пользователей имеет 2 столбца, но было предоставлено 1 значение, много вариантов перепробовал, но решения не нашел, как решить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Было:
    sql.execute(f"INSERT INTO users VALUES ('?, ?, ?')", (user_login, user_password, 0))
    Стало:
    sql.execute("INSERT INTO users VALUES (?, ?, ?)", (user_login, user_password, 0))

    1) Не использовать F-строки;
    2) Лишние одинарные кавычки вокруг знаков вопроса.
    Ответ написан
    8 комментариев
  • В чате ничего не выводится, а в консоли (снизу) как исправить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Логика вашей проверки мне не ясна. Сначала вы строку переводите в нижний регистр, а потом сравниваете ее со строкой, которая начинается с большой буквы. Много if,elif, и else конструкций - это плохо. Я бы заменил их все словарём.
    Например, так:
    from covid import Covid
    import telebot
    import config
    
    bot = telebot.TeleBot(config.TOKEN)
    covid = Covid()
    
    country = { 'сша':'Us',
          'украина':'Ukraine',
          'россия':'Russia',
          'беларусь':'Belarus',
          'казахстан':'Kazakhstan',
          'италия':'Italy',
          'франция':'France',
          'германия':'Germany',
          'япония':'Japan',
          }
    
    @bot.message_handler(commands=['start', 'help'])
    def send_welcome(message):
      bot.reply_to(message, "Начнем")
    
    @bot.message_handler(content_types=['text'])
    def start(message):
      get_message_bot = message.text.strip().lower()
      location = covid.get_status_by_country_name(country.get(get_message_bot,'russia'))
    
      final_message = f"<u>Данные по стране:</u>\n<b>Заболевших: </b>{location['confirmed']:,}\n<b>Умерших: </b>{location['deaths']:,}\n<b>Выздоровевших: </b>{location['recovered']:,}\n<b>Болеющих: </b>{location['active']:,}"
      bot.send_message(message.chat.id, final_message, parse_mode='html')
    
    bot.polling(none_stop=True)

    Посмотрим на строку:
    location = covid.get_status_by_country_name(country.get(get_message_bot,'russia'))

    country.get(get_message_bot,'russia') - здесь пытаемся получить значение словаря по ключу. В качестве ключа передаем строку, которую получили от пользователя. Если в словаре country есть
    элемент с ключом, тогда возвращаем значение элемента по ключу, а передаем это значение в метод
    get_status_by_country_name. Если в словаре нет такого ключа, тогда возвращаем стандартное значение(в нашем случае это - 'russia') и передаем его в метод get_status_by_country_name.

    Еще можно пойти дальше. Словарь стран хранить в файле.(Вообще не принято такие значения хардкорить в коде.)
    Также изобрели величайшее изобретение отладки - функцию print) Особенно полезно, если кодить в sublime или в блокноте. Можно выводить на консоль значение переменных, и понимать что в них хранится.
    От себя добавлю совет - все функции, которые исполузуются в боте(которым не нужен telegram api) писать и отлаживать в отдельном файле в простом скрипте. А потом, когда отладите - интегрируйте в свой бот. Ведь намного проще в функцию передать значение из своего скрипта, и посмотреть на выход, чем запустить бота, открыть телеграм, написать боту и т.д.
    Ответ написан
    Комментировать