Связать бота тг с SQL

Нужно добавить в код бота часть кода для связи с SQL. Необходимо вывести в таблицу SQL переменные, указанные в начале кода.

import telebot
from telebot import types

zakazchik = ''  #Заказчик
staff = ''  #Оборудование
problem = ''  #Дефект
work = ''  #Работы
mat = ''  #Материал
worktime = ''  #Время работы
waytime = '' #Время в пути


bot = telebot.TeleBot("2025230646:AAGxOrrAKP3zB1gB0gw-M9I_r7R1B337cD8")

@bot.message_handler(commands=['start'])
def send_welcome(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard= True)
    item1 = types.KeyboardButton('Регистрация')
    markup.add(item1)
    bot.send_message(message.chat.id, "Ниже вам нужно последовательно указать необходимые данные", reply_markup = markup)

@bot.message_handler(func=lambda m: True)
def echo_all(message):
    if message.text == 'Регистрация':

        bot.send_message(message.from_user.id, "Заказчик")
        bot.register_next_step_handler(message, reg_zakazchik)



def reg_zakazchik(message):
    global zakazchik
    zakazchik = message.text
    bot.send_message(message.from_user.id, "Оборудование")
    bot.register_next_step_handler(message, reg_staff)

def reg_staff(message):
    global staff
    staff = message.text
    bot.send_message(message.from_user.id, "Дефект")
    bot.register_next_step_handler(message, reg_problem)

def reg_problem(message):
    global problem
    problem = message.text
    bot.send_message(message.from_user.id, "Работы")
    bot.register_next_step_handler(message, reg_work)

def reg_work(message):
    global work
    work = message.text
    bot.send_message(message.from_user.id, "Материал")
    bot.register_next_step_handler(message, reg_mat)

def reg_mat(message):
    global mat
    mat = message.text
    bot.send_message(message.from_user.id, "Время работы")
    bot.register_next_step_handler(message, reg_worktime)

def reg_worktime(message):
    global worktime
    worktime = message.text
    bot.send_message(message.from_user.id, "Время в пути")
    bot.register_next_step_handler(message, reg_waytime)

def reg_waytime(message):
    global waytime
    waytime = message.text
    keyboard = types.InlineKeyboardMarkup()
    key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes')
    keyboard.add(key_yes)
    key_no = types.InlineKeyboardButton(text='Нет', callback_data='no')
    keyboard.add(key_no)
    question = "Заказчик:  " + zakazchik + ".   Оборудование:  " + staff + ".    Дефект:  " + problem + ".    Работа:  " + work + ".    Материалы:  " + mat + ".    Время работы:  " + worktime + ".    Время в пути:  " + waytime
    bot.send_message(message.from_user.id, text = question, reply_markup=keyboard)

@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
    if call.data == "yes":
        bot.send_message(call.message.chat.id, "Запись внесена в базу данных.")
    elif call.data == "no":
        name = ''
        surname = ''
        age = 0
        bot.send_message(call.message.chat.id, 'Нажмите кнопку "Регистрация" ещё раз')


bot.polling()

Ответы (1 шт):

Автор решения: Sergey Semenov

Если я правильно понял, то тебе нужно сохранять все запросы в базе. Если так, то можешь добавить еще одну функцию

import pymysql

def update_sql(my_var, message):
 db = pymysql.connect(host="localhost", user="my_user", passwd="my_pass", db="my_database")
 cursor = db.cursor()
 sql="insert into my_table value ('"+my_var+"','"+message+"')"
 cursor.execute(sql)
 db.commit()
 db.close()

Ну а дальше вызываешь эту функцию где тебе это нужно. Например вот так

def reg_zakazchik(message):
 global zakazchik
 zakazchik = message.text
 update_sql("zakazchik", zakazchik)
 bot.send_message(message.from_user.id, "Оборудование")
 bot.register_next_step_handler(message, reg_staff)
→ Ссылка