Предположим, что у меня есть такая таблицаSQLAlchemy декларативный наследование __table_args__
class Base(object):
id = Column(Integer, primary_key=True)
date_updated = Column(Date, nullable=True)
rating = Column(Integer, nullable=False, default=0)
status = Column(SmallInteger, nullable=False, default=0)
@declared_attr
def __tablename__(cls):
return "table_%s" % cls.LANG
@declared_attr
def __table_args__(cls):
return (
Index('ix__%s__rating' % cls.__tablename__, 'rating'),
Index(
'ix__%s__status' % cls.__tablename__,
'status',
postgresql_where=column('status') == 0,
),
Index(
'ix__%s__date_updated' % cls.__tablename__,
'date_updated',
postgresql_where=column('date_updated') != None,
),
)
class TableEn(Base, db.Model):
LANG = 'en'
class TableUk(Base, db.Model):
LANG = 'uk'
каким-то образом я нашел, как создавать такие (частичные) индексы, как status
и date_updated
в родительских __table_args__
.
Но мне нужно создать убывание сортировки индекса rating
, как func.desc(rating)
, но я не знаю, как сделать это.
Ни один из вариантов не работает для меня (вариант, и это ошибка):
Index('ix__%s__rating' % cls.__tablename__, 'rating desc')
исключение KeyError: 'Рейтинг DESC'
Index('ix__%s__rating' % cls.__tablename__, cls.rating.desc())
SQLAlchemy. exc.ArgumentError: нельзя добавлять неназванные co lumn в коллекции колонке
Index('ix__%s__rating' % cls.__tablename__, desc('rating'))
при создании схемы в БД
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ошибка синтаксиса или вблизи ")" ЛИНИЯ 1: CREATE INDEX ON ix__table_en__rating table_en()
конечно, я могу создать этот индекс вручную с помощью прямого SQL, но я уверенное решение существует где-то.
Заранее благодарен!