@whilealiveihope

Как вставить данные в таблицу на python?

Вот скрипт, на картинке, то что вводится в бд. Не понимаю как так, код слямзнутый . Пожалуйста, помогите понять и исправить

import telebot
import mysql.connector


bot = telebot.TeleBot("1717054658:AAFLT5f8UamqG1OSaCwnO0clZcxV-0Ik7_A")
db = mysql.connector.connect(host="localhost",user="root",password="7324",port="3306", database= "dog_show ")
cursor = db.cursor()
#cursor.execute("CREATE DATABASE dog_show")
#cursor.execute("CREATE TABLE users (first_name VARCHAR(255), phone_namber VARCHAR(255), dog VARCHAR(255), breed_dog VARCHAR(255), club_name VARCHAR(255), club_namber VARCHAR(255)  )")
#cursor.execute("ALTER TABLE users ADD COLUMN (id INT AUTO_INCREMENT PRIMARY KEY, user_id INT UNIQUE)")
#cursor.execute("CREATE TABLE input ( phone_namber VARCHAR(20), passwd_id VARCHAR(255))")
#cursor.execute("ALTER TABLE input ADD COLUMN (user_id INT UNIQUE)")
#cursor.execute("CREATE TABLE output ( user_id INT UNIQUE, dog VARCHAR(255),ring_namber VARCHAR(255), health VARCHAR(255), pedigree VARCHAR(255), vision VARCHAR(255), behavior VARCHAR(255), score VARCHAR(255), expert_id INT UNIQUE, expert VARCHAR(255))")
#cursor.execute("CREATE TABLE expert ( expert_id INT UNIQUE, expert VARCHAR(255), ring_namber VARCHAR(255),phone_namber VARCHAR(20))")
#cursor.execute("CREATE TABLE pedigree (user_id INT UNIQUE,pedigree_m VARCHAR(255), pedigree_p VARCHAR(255), merit_m VARCHAR(255), merit_p VARCHAR(255) )")
#cursor.execute(sql,val)
#db.commit()



user_data = {}
class User:
    def __init__(self, first_name):
        self.first_name = first_name
        self.phone_namber = ''
        self.dog = ''
        self.breed_dog= ''
        self.club_name = ''
        self.club_namber= ''

@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
        msg = bot.send_message(message.chat.id, "Введите ваши Фамилию, Имя, Отчество")
        bot.register_next_step_handler(msg, send_phone)


def send_phone(message):
    msg = bot.send_message(message.chat.id, "Введите ваш номер телефона:")
    bot.register_next_step_handler(msg, send_dog)


def send_dog(message):
    msg = bot.send_message(message.chat.id, "Как зовут вашего питомца?")
    bot.register_next_step_handler(msg, send_breed_dog)


def send_breed_dog(message):
    msg = bot.send_message(message.chat.id, "Какая парода у вашего питомца?")
    bot.register_next_step_handler(msg, send_club)


def send_club(message):
    msg = bot.send_message(message.chat.id, "Введите название вашего клуба:")
    bot.register_next_step_handler(msg, send_namber)

def send_namber(message):
    #try:
    user_id = message.from_user.id
    user_data[user_id] = User(message.text)
    msg = bot.send_message(message.chat.id, "Введите номер вашего клуба:")
    bot.register_next_step_handler(msg, process_lastname_step)
    #except Exception as e:
        #bot.reply_to(message, 'что-то пошло не так =(')


def process_lastname_step(message):
    try:
        user_id = message.from_user.id
        user = user_data[user_id]
        #user.first_name = message.text
        user.phone_namber = message.text
        user.dog = message.text
        user.breed_dog = message.text
        user.club_name = message.text
        user.club_namber = message.text

        sql = "INSERT INTO users (first_name, phone_namber, dog, breed_dog, club_name, club_namber, user_id ) VALUES (%s, %s, %s, %s ,%s , %s, %s)"
        #val = ("Карпова", "89995656655", "поп", "рой", "пора", "22", 1)
        val = (user.first_name, user.phone_namber, user.dog, user.breed_dog, user.club_name, user.club_namber, user_id)
        cursor.execute(sql, val)
        db.commit()
        bot.send_message(message.chat.id, "Вы успешно зарегистрированны!")
    except Exception as e:
        bot.reply_to(message, 'Ошибка, или вы уже зарегистрированны!')

bot.enable_save_next_step_handlers(delay=2)

bot.load_next_step_handlers()
if __name__ == '__main__':
    bot.polling(none_stop=True)

609e73b3dd632200790116.jpeg
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
@o5a
В этой системе подразумевается, что каждый ответ пользователя будет складываться в глобальный словарь данных о пользователе user_data, а в самом конце информация из словаря запишется в БД. Но в Вашем коде эта запись в словарь пропущена.
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
        msg = bot.send_message(message.chat.id, "Введите ваши Фамилию, Имя, Отчество")
        bot.register_next_step_handler(msg, send_phone)

def send_phone(message):
    # в message.text будет содержаться ФИО пользователя, т.к. сюда мы пришли из send_welcome
    # их и надо записать в словарь данных, первый раз с созданием нового пользователя
    user_data[message.from_user.id] = User(message.text)
    msg = bot.send_message(message.chat.id, "Введите ваш номер телефона:")
    bot.register_next_step_handler(msg, send_dog)

def send_dog(message):
    # на этом этапе пользователь уже создан, просто дополняем информацию (на данном этапе это номер телефона)
    user_data[message.from_user.id].phone_number = message.text
    msg = bot.send_message(message.chat.id, "Как зовут вашего питомца?")
    bot.register_next_step_handler(msg, send_breed_dog)

# аналогично с последующими шагами. нужно сохранять переданные пользователем данные

# и на последнем этапе просто достаем всю информацию по пользователю
def process_lastname_step(message):
    try:
        user_id = message.from_user.id
        user = user_data[user_id]

        # все эти присваивания user.phone_number уже не нужны, информация итак есть в user (т.к. это экземпляр класса User), используем ее напрямую
        #user.first_name = message.text
        #user.phone_namber = message.text
        #user.dog = message.text
        #user.breed_dog = message.text
        #user.club_name = message.text
        #user.club_namber = message.text

        sql = "INSERT INTO users (first_name, phone_namber, dog, breed_dog, club_name, club_namber, user_id ) VALUES (%s, %s, %s, %s ,%s , %s, %s)"
        val = (user.first_name, user.phone_namber, user.dog, user.breed_dog, user.club_name, user.club_namber, user_id)
        cursor.execute(sql, val)
        ...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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