Правильный способ вставки строк в колонку 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