2014-12-18 4 views
4

SQLAlchemy에서 Flask, Alembic 및 PostgreSQL을 사용하고 있습니다. 기존 테이블 location_messagescampaign_id이라는 열이 있습니다. 이것은SQLAlchemy를 통해 기존 테이블 열에 외래 키 제약 조건을 추가하려면 어떻게해야합니까?

campaign_id = db.Column(db.Integer) 

내가 그것을 외부 키를 추가 할 코드와 모델에 처음 만들어진, 그래서 내가 revision --autogenerate 실행

campaign_id = db.Column(db.Integer, db.ForeignKey('campaigns.id')) 

와 모델을 업데이트하지만 작성하지 않은되었다 아무것도 - 그래서 나는 docs 통해 찾고 있었지만 내 사용에 대한 구문을 grok 수 없습니다. 이 증류기에 (그것을 포기 후) 처음부터 테이블을 생성, 가치가 무엇인지를 들어

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

하지만 내 인생, 나는 기존 테이블이 작업을 수행 할 수있는 방법을 찾을 수 없습니다. 테이블의 인스턴스를 가져 와서 ForeignKeyConstraint을 열에 할당하는 방법이 있습니까?

답변

8

찾고있는 Alembic 운영자는 create_foreign_key입니다.

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

당신이 그래서 당신은 수동으로 이름이 아닌 이름으로 None를 전달할 수 있다는 automatic constraint naming를 사용하는 것이 좋습니다.

+0

일부 시나리오에서는 예를 들어, alembic 마이그레이션을 SQLAlchemy 모델과 동기화해야하는 경우 제약 조건에 명시 적 명명을 사용하는 것이 좋습니다. 그렇지 않으면 결과가 일부 'table_ibfk_ #'번호에 종속적 일 수 있으며 특정 FK 문제를 제거 할 수 있습니다. –