Отображение таблицы в класс создает сопоставленные свойства класса. Свойства имеют одинаковое имя столбцов по умолчанию. Поскольку python 2.x допускает только идентификаторы ascii, это не удастся, если у вас есть имена столбцов, отличных от ascii.
Единственное решение, которое я могу придумать, - это дать идентификаторам другое имя при отображении таблицы в класс.
Пример ниже делает это. Обратите внимание, что я создаю таблицу в коде для простоты, поэтому любой может выполнить код, не имея существующей таблицы. Но вы можете сделать то же самое с отраженной таблицей.
#-*- coding:utf-8 -*-
import sqlalchemy as sa
import sqlalchemy.orm
engine = sa.create_engine('sqlite://', echo=True) # new memory-only database
metadata = sa.MetaData(bind=engine)
# create a table. This could be reflected from the database instead:
tb = sa.Table('foo', metadata,
sa.Column(u'id', sa.Integer, primary_key=True),
sa.Column(u'nomé', sa.Unicode(100)),
sa.Column(u'ãéìöû', sa.Unicode(100))
)
tb.create()
class Foo(object):
pass
# maps the table to the class, defining different property names
# for some columns:
sa.orm.mapper(Foo, tb, properties={
'nome': tb.c[u'nomé'],
'aeiou': tb.c[u'ãéìöû']
})
После этого вы можете использовать Foo.nome
для ссылки на столбец nomé
и Foo.aeiou
для ссылки на столбец ãéìöû
.