Sto tentando di modificare il nome di una colonna. Primo tentativo è stato con questo script:Come scrivere le migrazioni dei nomi delle colonne con 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')
esecuzione migrate.py test
sul mio database dev (SQLite) funziona e così fa il potenziamento e il declassamento. Ma quando lo distribuisco nel mio ambiente di test su Heroku (dove viene usato PostgreSQL 8.3) ottengo una traccia quando provo ad aggiornare. Gist è questo messaggio:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) column "id" does not exist
Allora ho provato ad utilizzare users.c.user_id
nel metodo di aggiornamento. Che non riesce in entrambi gli ambienti .:
AttributeError: user_id
La soluzione che sto utilizzando ora è questo script:
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')
E 'già consigliato l' copiare e incollare il modello per gli script SQLAlchemy-migrare. Ma questa duplicazione extra diventa un po 'troppo per me. Qualcuno sa come dovrebbe essere fatto. Supponendo che sia un bug, mi piacerebbe avere dei suggerimenti su come ASCIUGARE la soluzione alternativa.
Bello, anche se sono diffidente nell'usare autoload = True nelle migrazioni dello schema. Solo un anticipo sul futuro, ricorda di applicare le modifiche al contrario nel downgrade! Se non lo fai, avrai (probabilmente) molti errori! –