Правильный способ вставки строк в колонку Unicode SQLAlchemy

У меня есть модель SQLAlchemy с столбцом Unicode. Иногда я вставляю в него значения unicode (u'Value '), но также иногда вставляю строки ASCII. Каков наилучший способ сделать это? Когда я вставляю строки ASCII со специальными символами, я получаю это предупреждение:

SAWarning: Unicode type received non-unicode bind param value ...

Как мне избежать этого? Каков правильный способ вставки разных типов строк?

Ответ 1

Thre - это несколько вариантов:

  • Отключить все предупреждения SQLAlchemy с помощью warnings.simplefilter('ignore', sqlalchemy.exc.SAWarning).
  • Отключить только это предупреждение с более конкретной спецификацией фильтра модулем и lineno или сообщением, например. warnings.filterwarnings('ignore', '^Unicode type received non-unicode bind param value', sqlalchemy.exc.SAWarning).
  • Используйте String(convert_unicode=True) вместо типа Unicode.
  • Переосмыслите проблему и измените код, чтобы использовать unicode даже для строк ASCII.

Ответ 2

Вы должны определить свой класс и конструктор таблицы как таковые:

class User(declarative_base()):
    _tablename__ = 'user'
    name = Column(Unicode(200, convert_unicode=False))
    textfield = Column(UnicodeText(convert_unicode=False))

user = Table('user', MetaData(),
Column('name', Unicode(200, convert_unicode=False), nullable=False),
Column('textfield', UnicodeText(convert_unicode=False), nullable=False),
)

Конечно, вы не должны забывать прикрепить URI+"charset=utf8" к create_engine function