Пишу бота Telegram на python3 и с использованием библиотекам python-telegram-bot и pymysql.
Возникла необходимость извлекать строки из базы данных по определенному значению.
Кодировка базы данных MySQL - utf8.
Кодировка в модуле при подключении к базе - utf8mb4 (Как я понял, utf-8 и utf8mb4 - это одно и то же).
Значение для выборки - строка из ответа пользователя, которая задана на кнопке заранее. Судя по документации Telegram API - передается также в кодировке utf-8. (Например: Москва)
Но не работает вторая функция:
def city_choice(bot, update, user_data):
user = update.message.from_user
with connection.cursor() as cursor:
sql = "SELECT `id`, `name` FROM `cities`"
cursor.execute(sql)
result = cursor.fetchall()
reply_keyboard = [[name['name']] for name in result]
markup = ReplyKeyboardMarkup(reply_keyboard, one_time_keyboard=True)
update.message.reply_text(
"Выберите город: ",
reply_markup=markup)
return DISTRICT
def district_choice(bot, update, user_data):
text = update.message.text
with connection.cursor() as cursor:
sql = "SELECT `id` FROM `cities` WHERE `name`=`Москва`"
cursor.execute(sql)
result = cursor.fetchone()
user_data['Город'] = text
reply_keyboard = [[name['name']] for name in result]
markup = ReplyKeyboardMarkup(reply_keyboard, one_time_keyboard=True)
update.message.reply_text('Выбран город "%s", теперь выберите район: ' % text,
reply_markup=markup)
return PRODUCT
Выдает вот такую ошибку:
pymysql.err.InternalError: (1054, "Unknown column '\u041c\u043e\u0441\u043a\u0432\u0430' in 'where clause'")
Пробовал .encode("utf-8"), .encode("utf8"), u" - не помогло.
Вывод кириллических значений работает правильно. Куда копать, чтобы заставить работать?