Поиск по номеру месяца если в клавиатуре указаны название месяцев
Как сделать поиск по номеру месяца если в клавиатуре указаны название месяцев?
Может можно как-то изменить значение клавиатуры или преобразовать название месяца в число.
Запрос 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,))
#.........