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 есть все, что вам может понадобиться.

Другие вопросы по тегам