Estoy intentando modificar un nombre de columna. Primer intento fue con este script:¿Cómo escribir las migraciones de nombre de columna alternas 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')
Correr migrate.py test
en mi base de datos dev (sqlite) que funciona y lo mismo ocurre con cambio de clase. Pero al implementarlo en mi entorno de prueba en Heroku (donde se usa PostgreSQL 8.3) obtengo un seguimiento cuando intento actualizarlo. Síntesis es este mensaje:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) column "id" does not exist
Luego trató de utilizar users.c.user_id
en el método de actualización. Eso no funciona tanto en entornos .:
AttributeError: user_id
La solución que estoy usando ahora es este 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')
Es una práctica ya se recomienda copiar y pegar el modelo para las secuencias de comandos SQLAlchemy-migrar. Pero estas duplicaciones adicionales son demasiado para mí. Alguien sabe cómo debe hacerse esto. Asumiendo que es un error, me gustaría recibir sugerencias sobre cómo SECAR la solución temporal.
Bueno, aunque desconfío de usar autoload = True en las migraciones de esquema. ¡Solo un aviso para el futuro, recuerde aplicar sus cambios al revés en la versión anterior! Si no lo haces, (probablemente) tendrás muchos errores. –