SQLAlchemy Oracle не может вставлять символы с ударением
У меня есть проект, основанный на Flask
который использует Oracle
база данных и общается через SQLAlchemy
и cx_Oracle
плагин. Моя проблема в том, что у меня есть простая таблица с 2 Strings
:
class Example(Base):
__tablename__ = 'example'
id = Column(Integer, primary_key=True)
title = Column(String(255))
description = Column(String(1024))
И когда я пытаюсь сохранить значения с ударением, я получаю эту ошибку:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 5: ordinal not in range(128)
В котором де кодировать символы различаются в зависимости от значения текста.
Вот пример значений:
object = Example()
object.title = 'É its a character with accent'
object.description = 'Á another characters with accent'
db_session.add(object)
db_session.commit()
У вас есть идеи, что я могу сделать, чтобы это исправить? Некоторая конфигурация?
Спасибо:)
ОБНОВИТЬ:
Как и предполагалось, я попробовал 2 других способа:
Пример класса (Base): tablename = 'example'
id = Column(Integer, primary_key=True)
title = Column(Unicode(255))
description = Column(Unicode(1024))
А также
Пример класса (Base): tablename = 'example'
id = Column(Integer, primary_key=True)
title = Column(String(255, convert_unicode=True))
description = Column(String(1024, convert_unicode=True))
Все еще получил ту же ошибку.
1 ответ
Это потому, что имена, которые вы используете, особенно акценты отсутствуют в таблице ASCII, попробуйте объявить свойство title как:
title = Column(String(255, convert_unicode=True)
Это может помочь, если не объявить это как Unicode
вместо String
, Для получения дополнительной информации вы также можете проверить документацию здесь:
http://docs.sqlalchemy.org/en/latest/core/type_basics.html
Вы также должны убедиться, что на вашем create_engine()
Функция у вас есть необязательный параметр кодирования как "UTF-8" или "latin1" в зависимости от набора символов, который вам может потребоваться ввести. Конечно, в UTF-8 есть все, что вам может понадобиться.