问题是(我将编写代码),当用户输入消息“Union”(小写字母或大写字母)或“Union”时,我开始在数据库中搜索 Name1 列,然后我应该给出所有找到的记录。但是在数据库中,在Name1列中,文本可以同时包含大写和小写字母,一般情况下,还有其他选项(有很多)。以前我使用“if message.text.lower() == "hello":" 并且一切正常,我想将用户的消息传递给一个变量(在数据库中搜索它)并应用“.lower() ”给它,类似于“消息.text.lower()==名称:”。什么都没有成功。我认为可以立即在变量中执行此操作,例如像这样的“name = message.text.lower()”或“name = message.text.lower() ==message.text”,但它仍然没有工作。我怎样才能使它在用户输入消息(任何,甚至是这样的“SoYuz”)时使用小写。或者它可能对我没有帮助,我需要在数据库本身中引入一个,即 将“联合”或“联合”更改为“联合”?
@dp.message_handler(state=ShopCentre_name.shop_centre_name)
async def shop_centre_name(message: types.Message, state: FSMContext):
name = message.text
if name.lower():
name_1 = cursor.execute(f"SELECT * FROM shopCentre WHERE Name1 LIKE '%{name}%'").fetchall()
num_col = len(name_1)
if name == '/Stop':
await message.answer('Поиск завершен. Для поиска введите команду /start (аналогичные команды - /ы и /s)')
await state.finish()
else:
await message.answer('Количество найденных записей:\n' + '<b>' + str(num_col) + '</b>' + '\n\nДля завершения поиска, нажмите на /Stop.')
for row in name_1:
await message.answer('Наименование торгового центра:\n' + '<b>' + row[1] + '</b>' + '\n\n' + 'Кадастровый номер объекта налогообложения:\n'+ '<b>' + row[3] + '</b>' + '\n\n' + 'Вид объекта:\n' + '<b>' + row[2] + '</b>')
除了我的问题:我尝试编写代码,但没有给出预期的结果(见截图 1):
@dp.message_handler(state=ShopCentre_name.shop_centre_name)
async def shop_centre_name(message: types.Message, state: FSMContext):
name = message.text.lower()
name_1 = cursor.execute(f"SELECT * FROM shopCentre WHERE Name1 LIKE '%{name}%'").fetchall()
num_col = len(name_1)
if name == '/Stop':
await message.answer('Поиск завершен. Для поиска введите команду /start (аналогичные команды - /ы и /s)')
await state.finish()
else:
await message.answer('Количество найденных записей:\n' + '<b>' + str(num_col) + '</b>' + '\n\nДля завершения поиска, нажмите на /Stop.')
for row in name_1:
await message.answer('Наименование торгового центра:\n' + '<b>' + row[1] + '</b>' + '\n\n' + 'Кадастровый номер объекта налогообложения:\n'+ '<b>' + row[3] + '</b>' + '\n\n' + 'Вид объекта:\n' + '<b>' + row[2] + '</b>')
Также, думал написать код вот так "async def shop_centre_name(message: types.Message.text.lower(), state: FSMContext):" или подобные варианты, но выдавало ошибку, т.к. просто не знаю, можно ли сюда прописать ".lower()".
代码执行结果(截图1)

没有一个选项有助于找到答案。我尝试了一切,如果在某种情况下它有帮助,例如在数据库中找到“ATOLL”,那么就没有简单的条目“TC Kitezh”等。我已经尝试了以下链接中的建议:
https://translated.turbopages.org/proxy_u/en-ru.ru.10e2cfcf-626a4395-77380ca7-74722d776562/https/stackoverflow.com/questions/973541/how-to-set-sqlite3-to-be-case- insensitive-when-%20string-comparing
https://qna.habr.com/q/186215
https://zametkinapolyah.ru/zametki-o-mysql/chast-11-1-ogranicheniya-urovnya-stolbca-v-bazax-dannyx-sqlite.html
事实证明,通过编辑单个拼写的数据库来实现结果,例如,“环礁”,没有不必要的单词,如“TC”。
总的来说,你的逻辑是正确的,但在实现中存在一个小错误。