Поиск по номеру месяца если в клавиатуре указаны название месяцев

Как сделать поиск по номеру месяца если в клавиатуре указаны название месяцев?
Может можно как-то изменить значение клавиатуры или преобразовать название месяца в число.

Запрос SQLite

def select_mesac_narodgenya(message):
    conn = sqlite3.connect(settings.DATABASE)
    cursor = conn.cursor()   
    sql = "SELECT last_name, first_name, third_name, data_r FROM dovidnyk WHERE strftime('%m', data_r) = ?"
    query = "%{}%".format(message.text.casefold())
    cursor.execute(sql, (query,))
    result = cursor.fetchall()
    for fn in result:
        msg =  "<i>? <u>ФИО</u></i>:  <b>{} {} {}</b>\n" \
               "<i>? <u>Дата рожlенbя</u></i>:  <b>{}</b>\n".format(fn[0], fn[1], fn[2], fn[3])
        bot.send_message(message.from_user.id, msg, reply_markup=keyboard, parse_mode='HTML')

Клавиатура - Январь, Февраль, .....

    kb = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
    kb.row(KEYBOARD['DATAR_01'], KEYBOARD['DATAR_02'], KEYBOARD['DATAR_03'])
    kb.row(KEYBOARD['DATAR_04'], KEYBOARD['DATAR_05'], KEYBOARD['DATAR_06'])
    kb.row(KEYBOARD['DATAR_07'], KEYBOARD['DATAR_08'], KEYBOARD['DATAR_09'])
    kb.row(KEYBOARD['DATAR_10'], KEYBOARD['DATAR_11'], KEYBOARD['DATAR_12'])

Пример таблицы SQLite

Текст


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

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

Если я правильно понял, и на сервер после нажития кнопки прилетает название месяца, что-то вроде press_key = 'Март', то воспользуйтесь словарем с названием в ключе и номером в значении:

months = {
    'январь': '01', 
    'февраль': '02, 
    'март': '03',
    'апрель': '04',
    'май': '05',
    'июнь': '06',
    'июль': '07',
    'август': '08',
    'сентябрь': '09',
    'октябрь': '10',
    'ноябрь': '11',
    'декабрь': '12',
}

а в запрос подставьте значение по этому ключу (months[press_key.lower() будет равен 3 при press_key = 'Март'):

SELECT last_name, first_name, third_name, data_r 
FROM dovidnyk 
WHERE strftime('%m', data_r) = months[press_key.lower()]

т.е. у вас код измениться на:

sql = f"SELECT last_name, first_name, third_name, data_r 
        FROM dovidnyk 
        WHERE strftime('%m', data_r) = {months[press_key.lower()]}"
cursor.execute(sql)
result = cursor.fetchall()
→ Ссылка
Автор решения: 13_Voin

Работает.

#........
sql = "SELECT last_name, first_name, third_name, data_r FROM dovidnyk WHERE lower(strftime('%m', data_r)) like ? ORDER BY strftime('%d-%m', data_r) ASC"
months = {
        '%январь%': '01', 
        '%февраль%': '02', 
        '%март%': '03',
        '%апрель%': '04',
        '%май%': '05',
        '%июнь%': '06',
        '%июль%': '07',
        '%август%': '08',
        '%сентябрь%': '09',
        '%октябрь%': '10',
        '%ноябрь%': '11',
        '%декабрь%': '12',}
query = "%{}%".format(message.text.casefold())
query = query.title()
querys = months.get(query.lower())
cursor.execute(sql, (querys,))
#.........
→ Ссылка