Как добавить ограничение внешнего ключа к существующему столбцу таблицы с помощью SQLAlchemy?
Я использую Flask, перегонный куб и PostgreSQL с SQLAlchemy. У меня есть существующая Таблица location_messages
со столбцом campaign_id
. Это было создано первоначально в модели с кодом
campaign_id = db.Column(db.Integer)
Я хочу добавить к нему внешний ключ, поэтому я обновил модель с помощью
campaign_id = db.Column(db.Integer, db.ForeignKey('campaigns.id'))
Я запустил revision --autogenerate
, но он ничего не создал-поэтому я просматривал docs, но я не могу найти синтаксис для моего использования. Как бы то ни было, создание таблицы с нуля (после ее удаления) в перегонном кубе is
op.create_table('location_messages',
[...]
sa.Column('campaign_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(['campaign_id'], ['campaigns.id'], ),
sa.PrimaryKeyConstraint('id')
)
Но за всю свою жизнь я не могу найти способ сделать это для существующей таблицы. Есть ли способ просто получить экземпляр таблицы и назначить ForeignKeyConstraint
столбцу?2 ответа:
Перегонный куб, который вы ищете, это
create_foreign_key
.op.create_foreign_key( 'fk_location_message_campaign', 'location_messages', 'campaigns', ['campaign_id'], ['id'], )
Рекомендуется использоватьавтоматическое именование ограничений , чтобы можно было передать
None
в качестве имени, а не называть его вручную.