Я использую sqlalchemy и пытаюсь интегрировать alembic для миграции базы данных.
Моя база данных в настоящее время существует и имеет ряд ForeignKeys, определенных без имен. Я хотел бы добавить соглашение об именах, чтобы разрешить миграции, которые влияют на столбцы ForeignKey.
Я добавил соглашение об именах, приведенное здесь, в начало моего файла models.py: Ограничения именования SQLAlchemy
convention = {
      "ix": 'ix_%(column_0_label)s',
      "uq": "uq_%(table_name)s_%(column_0_name)s",
      "ck": "ck_%(table_name)s_%(constraint_name)s",
      "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
      "pk": "pk_%(table_name)s"
              }
DeclarativeBase = declarative_base()
DeclarativeBase.metadata = MetaData(naming_convention=convention)
def db_connect():
   return create_engine(URL(**settings.DATABASE))
def create_reviews_table(engine):
    DeclarativeBase.metadata.create_all(engine)
class Review(DeclarativeBase):
    __tablename__ = 'reviews'
    id = Column(Integer, primary_key=True)
    review_id = Column('review_id', String, primary_key=True)
    resto_id = Column('resto_id', Integer, ForeignKey('restaurants.id'),
            nullable=True)
    url = Column('url', String),
    resto_name = Column('resto_name', String)
Я установил alembic/env.py в соответствии с инструкциями по обучению, загружая метаданные моей модели в target_metadata.
Когда я запустил
$: alembic current
Я получаю следующую ошибку: sqlalchemy.exc.InvalidRequestError: Соглашение о присвоении имен, включая% (constraint_name) s, требует, чтобы ограничение было явно указано.
В документах говорится: "Эта же функция [генерация имен для столбцов с использованием соглашения об именах] вступает в силу, даже если мы просто используем флаг Column.unique:" 1, поэтому я думаю, что не должно быть проблемы (они продолжают приводить пример с использованием ForeignKey, который также не назван).
Нужно ли мне возвращаться и давать все мои ограничения явным именам, или есть способ сделать это автоматически?
