열 이름을 변경하려고합니다. 첫 번째 시도는이 스크립트를했다 :sqlalchemy-migrate를 사용하여 열 이름 마이그레이션을 변경하는 방법을 작성 하시겠습니까?
meta = MetaData()
users = Table('users', meta,
Column('id', Integer, primary_key=True),
Column('name', String(50), unique=True),
Column('email', String(120), unique=True)
)
def upgrade(migrate_engine):
meta.bind = migrate_engine
users.c.id.alter(name='id')
def downgrade(migrate_engine):
meta.bind = migrate_engine
users.c.id.alter(name='user_id')
은 (sqlite가) 작동 내 dev에 데이터베이스에 migrate.py test
실행 등 업그레이드 및 다운 그레이드를 수행합니다. 그러나 Heroku (PostgreSQL 8.3이 사용되는)의 테스트 환경에 배포 할 때 업그레이드를 시도 할 때 추적이 발생합니다. 이 메시지는 다음과 같습니다.
sqlalchemy.exc.ProgrammingError: (ProgrammingError) column "id" does not exist
그런 다음 업그레이드 방법으로 users.c.user_id
을 사용하려고했습니다. 그것은 이미 SQLAlchemy의-마이그레이션 스크립트를 복사 - 붙여 넣기 모델에 연습을 권장
meta_old = MetaData()
meta_new = MetaData()
users_old = Table('users', meta_old,
Column('user_id', Integer, primary_key=True),
Column('name', String(50), unique=True),
Column('email', String(120), unique=True)
)
users_new = Table('users', meta_new,
Column('id', Integer, primary_key=True),
Column('name', String(50), unique=True),
Column('email', String(120), unique=True)
)
def upgrade(migrate_engine):
meta_old.bind = migrate_engine
users_old.c.user_id.alter(name='id')
def downgrade(migrate_engine):
meta_new.bind = migrate_engine
users_new.c.id.alter(name='user_id')
: 그 두 환경 :
AttributeError: user_id
내가 지금 사용하고 해결에 실패하면이 스크립트입니다. 그러나이 여분의 중복은 나에게 너무 많은 것을 얻는다. 이것이 어떻게 이루어져야하는지 누구나 알고 있습니다. 그것이 버그라고 가정 할 때, 해결 방법을 약간 줄이는 방법에 대한 제안을 원합니다.
니스, 비록 스키마 마이그레이션에서 autoload = True를 사용하는 것을 조심스럽게 생각합니다. 미래를 향해 나가기 위해서는 다운 그레이드에서 역순으로 변경 사항을 적용하십시오! 당신이하지 않으면, 당신은 (아마도) 많은 오류가 발생합니다! –