Python, oracle. Выдача запроса в Telegram bot

Доброй ночи всем! Прошу помощи кто чем сможет помочь, написал бот но не могу при этом получить запрос по идентификатору.

    import telebot
from telebot import types
import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir=r"C:\ProgramData\Microsoft Visual Studio\instantclient_21_3")
bot = telebot.TeleBot(token)
conn=cx_Oracle.connect(********)
sql = conn.cursor()
@bot.message_handler(commands=["start"])
def start(message):
    rmk = types.ReplyKeyboardMarkup(row_width=6)
    rmk.add(types.KeyboardButton('Код товара'), types.KeyboardButton('Наименование товара'))
    
    msg = bot.send_message(message.chat.id, "Выбирете желаемое", reply_markup=rmk)
    bot.register_next_step_handler(msg, user_unswer)


def user_unswer(message):
    if message.text == "Код товара":
        msg = bot.send_message(message.chat.id, "Впишите код товара")
        bot.register_next_step_handler(msg, user_reg)
    elif message.text == "Наименование товара":
        msg = bot.send_message(message.chat.id, "На данный момент этот пункт не работает!")
        bot.register_next_step_handler(msg, start)
    else:
        bot.send_message(message.chat.id, "Еще раз повторяю не работает!")
def user_reg(message):
    if message.text == "":
        res=sql.execute("SELECT skucode, name from sku where skucode = '{message.text}'")
    res=sql.fetchall()
    bot.send_message(message.chat.id, res)
conn.close()
bot.polling(none_stop=True, interval=0)

Основная проблема идет в последнем def выдает ошибку то нет подключения, если убрать res=sql.fetchall() и в bot.send_message прописать (message.chat.id, skucode, name) ругается что нет таких ячеек, уже незнаю что делать подскажите кто чем может если не спите, борюсь уже 5 часов и не получается ничего хочу спать, если что пишите в коменты свои варианты завтра проснусь посмотрю отвечу


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

Автор решения: mazik7512

Ну во-первых, вы тут же закрываете подключение к БД в предпоследней строчке, отсюда и ошибка подключения.

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

В третьих, поле text не может быть пустым, так что эта проверка никогда не сработает и вы никогда не будете формировать и выполнять запрос.

И последнее, научитесь выравнивать и форматировать код.


def user_reg(message):
    res=sql.execute("SELECT skucode, name from sku where skucode = '{message.text}'")
    res=sql.fetchall()
    bot.send_message(message.chat.id, res)
    

bot.polling(none_stop=True, interval=0)
conn.close()
→ Ссылка