Я переключаю унаследованный проект на автоматическое создание миграций alembi c, и в нем есть некоторые индексы, которые sqlalchemy не распознает. Когда я запускаю alembic revision --autogenerate migration_name
, создается пустая миграция (поскольку я устранил все другие несоответствия), но я получаю 8 предупреждений, таких как:
/project/.venv/lib/python3.6/site-packages/sqlalchemy/dialects/postgresql/base.py:3328: SAWarning: Skipped unsupported reflection of expression-based index idx_name
"expression-based index %s" % idx_name
В postgres я ищу определение индекса следующим образом:
mydb=# SELECT tablename, indexdef FROM pg_indexes WHERE schemaname = 'public' AND indexname = 'idx_name';
tablename | indexdef
-----------+-------------------------------------------------------------------------------
plan | CREATE UNIQUE INDEX idx_name ON public.plan USING btree (lower((name)::text))
(1 row)
После прочтения этого поста SO Я попытался добавить индекс после определения модели и к __table_args__
.
# add it after model definition
class Plan(db.Model):
__table_name__ = 'plan'
# ...
db.Index('this_does_nothing_in_autogenerate', func.lower(Plan.__table__.c.name), unique=True)
# Add it to table_args
class Plan(Base, db.Model):
__table_name__ = 'plan'
__table_args__ = (
db.Index('idx_this_also_does_nothing', text('LOWER(name)')),
)
Оба эти изменения добавляют Предупреждения (показаны ниже), создайте пустую миграцию и не удаляйте исходное предупреждение. Я понимаю, что sqlalchemy + alembi c не может обработать эти более сложные индексы, но есть ли способ заставить замолчать предупреждения?
# Warning for first method
/home/chriscauley/develop/kennel/.venv/lib/python3.6/site-packages/alembic/util/messaging.py:69: UserWarning: autogenerate skipping functional index this_does_nothing_in_autogenerate; not supported by SQLAlchemy reflection
warnings.warn(msg)
# warning for second __table_args__ method
/home/chriscauley/develop/kennel/.venv/lib/python3.6/site-packages/alembic/util/messaging.py:69: UserWarning: autogenerate skipping functional index idx_this_also_does_nothing; not supported by SQLAlchemy reflection
warnings.warn(msg)