Проверка значения sql параметра

try:

   text = message.text.split()
   id = text[1]
   c.execute(f"SELECT post_num FROM staff WHERE user_id = {id}")
   rows = c.fetchone()

   if not rows:
       bot.send_message(-4654489442, 'другой текст')
   elif rows == 9:
       bot.send_message(message.chat.id, 'один текст')

вот отрывок кода, где по идее, если значение post_num равняется 9, то отправляется одно сообщение, а если его нет - то другое. Также хотел сделать другие значения с 1 по 9 поэтому их будет не 2. Помогите, пожалуйста


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

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

Насколько я понимаю, Вас смущает множество elif. Если я вас правильно понял, то Вам надо сделать то, что в других языках называется "таблица эмуляции".

Например, я чуть преобразовал ваш пример и сделал словарь, где ключём является число от 0 до 9, а значением - метода вашего объекта bot (выше я просто для проверки кода сделал класс для такого объекта с одним методом).

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

# просто эмулирую Ваш класс
class Bot:
    def send_message(self,*args):
        for i in args:
            print(i)

bot = Bot()

# делаю таблицу эмуляции с вызовом
dc = {rows: [bot.send_message if j == 0
    else [f'chat_id {j}', 'text for chat']
        for j in range(2)] for rows in range(10)}
try:
   text = 'Просто текст'.split()
   id = text[1]
   #c.execute(f"SELECT post_num FROM staff WHERE user_id = {id}")
   rows = 9 # тут можно поиграться значениями 0 и 9

   dc.get(rows)[0](*dc.get(rows)[1])
except:
    raise
→ Ссылка