Не работает условие WHERE в SQLite запросе

Пишу телеграм-бота, возникла надобность сделать клавиатуру ReplyKeyboardMarkup, где значения кнопок будут браться из базы данных SQLite. Написал соответствующую функцию:

async def cmd_abit_filters_region(message: types.Message, state = FSMContext):
async with state.proxy() as abit_filter:
    abit_filter['region'] = message.text[1:]
region_pressed = "('" + message.text[1:] + "',)"
region_pressed = message.text[1:]
with open('''C:/Users/vvvpe/Desktop/Connect/Data/filters.txt''', 'a') as filters:
    filters.write('''\n["%s", ''' % str(abit_filter['region']))

universities_list = []
for value in cur.execute(f'''SELECT university FROM vlnt_table WHERE region = ?''', [region_pressed]):
    current_value = str(value)
    current_value = current_value.replace('(', '')
    current_value = current_value.replace(')', '')
    current_value = current_value.replace("'", "")
    current_value = current_value.replace(',', '')
    print(current_value)
    universities_list.append(current_value)
base.commit()
universities_set = list(set(universities_list))
universities_set = universities_list
print(universities_set)
kb_universities = ReplyKeyboardMarkup(resize_keyboard=True)
for i in universities_set:
    kb_universities.add(f"Университет {i}")

await FSMFilters.next()
await bot.send_message(message.from_user.id, 'Выберите интересующий вас вуз', reply_markup=kb_universities)

Никаких трейсов нет. Просто не включается клавиатура, как будто в цикле for курсор не находит в базе соответствия. Я пробовал выводить значения из базы, выдаётся такое: ('Москва',), ('Санкт-Петербург',) - с запятыми и скобками, поэтому я пытался к переменной region_pressed эти знаки вручную прикрутить. Пробовал и без этого костыля - не работает, ошибок не выдаёт((( Помогите, пожалуйста!


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

Автор решения: Сергей

Это же кортежи - их execute принимает. Тогда рекомендация на исправление вместо "эти знаки вручную прикрутить":

region_pressed = (message.text[1:],)

Тут тип - кортеж, как видим из type (region_pressed).

А у вас строка получалась:

region_pressed = "('" + message_text[1:] + "',)"

Мне не проверить - нет БД, подкрутите по ситуации.

И, как понимаю, писать надо в запросах не [region_pressed], а просто region_pressed. Вот похожий случай: Sqlite3.InterfaceError: Error binding parameter 0 — probably unsupported type как исправить?

→ Ссылка