У меня есть фляжное приложение, использующее sql-alchemy и фляжную миграцию для обработки изменений базы данных. Каждый раз, когда я запускаю миграцию фляги, чтобы создать сценарий для Alembic для обновления базы данных, сценарий содержит команды для создания внешних ключей, которые уже существуют в моей базе данных.
Определение таблицы в моих моделях.py:
class Airline(db.Model):
__tablename__ = 'Airlines'
AirlineID = db.Column(db.Integer, primary_key=True)
AirlineShortCode = db.Column(db.String(3), index=True, unique=True, nullable=False)
FullName = db.Column(db.String(256), unique=False, nullable=True)
ShortName = db.Column(db.String(64), unique=False, nullable=True)
class CabinClass(db.Model):
__tablename__ = 'CabinClasses'
CabinClassID = db.Column(db.Integer, primary_key=True)
AirlineShortCode = db.Column(db.ForeignKey("Airlines.AirlineShortCode"), nullable=True)
CabinClassShortCode = db.Column(db.String(32), unique=False, nullable=False)
CabinClassName = db.Column(db.String(64), unique=False, nullable=True)
Строка в сценарии обновления базы данных миграции, созданная для создания внешнего ключа,
op.create_foreign_key(None, 'CabinClasses', 'Airlines', ['AirlineShortCode'], ['AirlineShortCode'])
Эта строка генерируется каждый раз, когда я создаю сценарий миграции, что приводит к множеству записей внешнего ключа в таблице CabinClasses:
Я вижу, что имя каждого созданного внешнего ключа отличается и что команда create_foreign_key
в сценарии миграции базы данных указывает имя как None
. Я считаю, что это правильно, если вы используете автоматическую схему именования, что, как я полагаю, происходит по умолчанию.
Для настроек, в которых используется автоматическая схема именования, такая как описанная в разделе «Настройка соглашений об именовании ограничений», имя здесь может быть «Нет», так как прослушиватель событий применит имя к объекту ограничения, когда он связан с таблицей.
https://alembic.sqlalchemy.org/en/latest/naming.html
Может ли кто-нибудь определить, что может привести к созданию этих внешних ключей каждый раз, когда я обновляю базу данных?