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 шт):
Ну во-первых, вы тут же закрываете подключение к БД в предпоследней строчке, отсюда и ошибка подключения.
Во-вторых, вначале функции 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()