Телеграмм бот заносит во все столбцы базы данных только последний пункт - возраст.

Antoni_Supreme

Новичок
Пользователь
Янв 24, 2022
2
0
1
Windows 10
Python 3.8
pip telebot, sqlite3. последние версии
Приветствую. Создал бота в телеграмме, который поэтапно регистрирует пользователя. Первый этап - имя, второй - фамилия, третий - возраст. В базу данных во все столбцы заносит только возраст. Помогите с решением, буду благодарен.
Скриншоты: https://yapx.ru/v/QQgZD
  1. Python:
    import sqlite3
    from sqlite3 import Connection
    
    import telebot
    
    
    name = ''
    last_name = ''
    age = ''
    
    bot = telebot.TeleBot("токен", parse_mode=None)
    
    
    connect: Connection = sqlite3.connect('LastBD.db', check_same_thread=False)
    cursor = connect.cursor()
    
    cursor.execute(""" CREATE TABLE IF NOT EXISTS Login_id(user_id INTEGER PRIMARY KEY)""")
    
    
    connect.commit()
    
    cursor.execute(""" CREATE TABLE IF NOT EXISTS Info(Name TEXT)""")
    
    
    
    def db_table_val(user_id: int, user_name: str, user_age: str):
        cursor.execute('INSERT INTO Login_id (user_id, user_name, user_age) VALUES (?, ?, ?)',
                       (user_id, user_name, user_age))
        connect.commit()
    
    
    @bot.message_handler(commands=['start'])
    def start_message(message):
        bot.send_message(message.chat.id, 'Добро пожаловать. Введите: "Заполнить мои данные в таблицу вручную", дабы я поэтапно вас записал.\n Либо: "Заполнить мои данные в таблицу автоматически" ')
    
    
    @bot.message_handler(content_types=['text'])
    def get_text_messages(message):
        if message.text == 'Заполнить мои данные в таблицу автоматически':
            bot.send_message(message.chat.id, 'Введите ваше имя.')
            bot.register_next_step_handler(message, info_name)
    
            us_id = message.from_user.id
            us_name = message.from_user.first_name
            us_age = message.from_user.last_name
    
            db_table_val(user_id=us_id, user_name=us_name, user_age=us_age)
    
            #ручная регистрация
    
        if message.text == "Заполнить мои данные в таблицу вручную":
            bot.send_message(message.from_user.id, "Введи своё имя!")
            bot.register_next_step_handler(message, info_name)
    
    def db_table_val(Name: int, Last_Name: str, Age: str):
        cursor.execute('INSERT INTO Info (Name, Last_Name, Age) VALUES (?, ?, ?)',
                       (Name, Last_Name, Age))
        connect.commit()
    
    def info_name(message):
        global name
        name = message.text
        bot.send_message(message.from_user.id, "Прекрасное имя! Теперь введи свою фамилию!")
        bot.register_next_step_handler(message, info_last_name)
    
    def info_last_name(message):
        global lastname
        lastname = message.text
        bot.send_message(message.from_user.id, "Теперь введи свой возраст.")
        bot.register_next_step_handler(message, info_age)
    
    def info_age(message):
        global age
        age = message.text
    
    
        name = message.text
        lastname = message.text
        age = message.text
        db_table_val(Name=name, Last_Name=lastname, Age=age)
    
    
    
        connect.commit()
    
    bot.polling(none_stop=True)
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
В базу данных во все столбцы заносит только возраст.
Так происходит потому, что в коде в эти переменные перед записью в базу заносятся значения возраста.
Python:
def info_age(message):
    global age
    age = message.text


    name = message.text  # в переменную name записывается возраст
    lastname = message.text  # в переменную lastname записывается возраст
    age = message.text  # в переменную age записывается возраст
    db_table_val(Name=name, Last_Name=lastname, Age=age)



    connect.commit()
Чтобы исправить можно попробовать удалить строки в которых в переменные записывается возраст тогда в базу попадут значения из глобальных переменных:
Python:
def info_age(message):
    global age
    age = message.text

    db_table_val(Name=name, Last_Name=lastname, Age=age)
    connect.commit()
 

Antoni_Supreme

Новичок
Пользователь
Янв 24, 2022
2
0
1
Так происходит потому, что в коде в эти переменные перед записью в базу заносятся значения возраста.
Python:
def info_age(message):
    global age
    age = message.text


    name = message.text  # в переменную name записывается возраст
    lastname = message.text  # в переменную lastname записывается возраст
    age = message.text  # в переменную age записывается возраст
    db_table_val(Name=name, Last_Name=lastname, Age=age)



    connect.commit()
Чтобы исправить можно попробовать удалить строки в которых в переменные записывается возраст тогда в базу попадут значения из глобальных переменных:
Python:
def info_age(message):
    global age
    age = message.text

    db_table_val(Name=name, Last_Name=lastname, Age=age)
    connect.commit()
ОГРОМНОЕ спасибо!!! Помогло!
 

Форум IT Специалистов