我正在写一个电报机器人,需要制作一个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 循环中光标在基数中找不到匹配项。我尝试显示来自数据库的值,显示如下: ('Moscow',), ('St. Petersburg',) - 带有逗号和括号,所以我尝试手动将这些字符附加到 region_pressed 变量。我试过没有这个拐杖 - 它不起作用,它不会出错(((请帮助!
这些是元组 - 它们被
execute接受。然后建议更正而不是“手动拧这些标志”:这里的类型是一个元组,正如我们从
type (region_pressed).你得到了这条线:
我无法检查 - 没有数据库,根据情况调整。
而且,据我了解,有必要写 requests 不是
[region_pressed],而是简单地region_pressed。这是一个类似的情况: Sqlite3.InterfaceError: Error binding parameter 0 - 可能是不支持的类型如何修复?