@Princess_York
Beginner Android developer

Как добиться поддержки кириллицы в Python3 flask + mysql?

Здравствуйте. При проектировании простейшего web api на Python3 столкнулся с проблемой:
  • я использую flask
  • я использую mariadb
  • я делаю cursor.execute, потом cursor.fetchall
  • я получаю result tuple в котором все кириллические символы заменены знаками вопроса
  • соответственно flask.jsonify(result) тоже выдаёт json со знаками вопроса
  • с латиницей и числами всё в порядке



5b20b11677bc9545164396.png
Собственно вопрос в том, что с этим делать, и можно ли вообще что-то сделать? Или проще будет по быстрому переписать с красивого пайтона на что-то более страшное, но рабочее?
  • Вопрос задан
  • 3954 просмотра
Решения вопроса 1
@Princess_York Автор вопроса
Beginner Android developer
Решение было любезно предоставлено в комментариях пользователем pcdesign.
Чтобы из базы данных читалась нужная кодировка был использован следующий вариант метода pymysql.connect():
db = pymysql.connect(host='localhost',
                             user='myuser',
                             passwd='welcome',
                             db='mydb',
                             charset='utf8')

Это решило половину проблемы – теперь из базы всё читалось как надо, но flask отображал юникодовские символы просто выводя их код. Чтобы решить эту невзгоду был применен следующий подход:
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

С этого момента flask.jsonify начал отдавать кириллические символы такими какие они есть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Начать однозначно стоит с чтения Unicode HOWTO документации Python. И обязательно убедиться, что кодировка базы - UTF-8.
Ответ написан
nuBacuk
@nuBacuk
Python/Linux
В документации написано то необходимо явно указывать кодировку. charset=utf8, пример ниже и документация.
# set client encoding to utf8; all strings come back as unicode
create_engine('mysql+mysqldb:///mydb?charset=utf8')

docs.sqlalchemy.org/en/latest/dialects/mysql.html#...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы