Как добавить ограничение внешнего ключа к существующему столбцу таблицы с помощью 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   8  

2 ответа:

Перегонный куб, который вы ищете, это create_foreign_key.

op.create_foreign_key(
    'fk_location_message_campaign',
    'location_messages', 'campaigns',
    ['campaign_id'], ['id'],
)

Рекомендуется использоватьавтоматическое именование ограничений , чтобы можно было передать None в качестве имени, а не называть его вручную.

ForeignKey просто должен быть кортежем ... поэтому вместо ['campaign_id'] напишите ('campaign_id',)

op.create_table('location_messages',
[...]
sa.Column('campaign_id', sa.Integer(), nullable=True),
sa.ForeignKeyConstraint(('campaign_id',), ['campaigns.id'], ),
sa.PrimaryKeyConstraint('id')
)