Estoy tratando de agregar un campo o columna a una tabla existente usando SQLAchemy.
A continuación se muestra la clase de tabla.
class ReleaseVersion(Base): __tablename__ = 'versions' id = Column(Integer, primary_key=True, autoincrement=True) release = Column(String(128), nullable=False, unique=True) def __init__(self,release, id=None): if(id): self.id = id self.release = releaseInicialicé la tabla usando la siguiente línea
myDB.ReleaseVersion.__table__.create(bind=self.engine, checkfirst=True)Después de usar la base de datos durante algún tiempo, necesito agregar un campo booleano, 'is_currentversion' mientras mantengo todo el contenido existente de la tabla, pero no estoy tan seguro de cómo hacerlo.
¿Debo crear manualmente el campo en la tabla y actualizar la clase? Alternativamente, agregue el campo en la clase de tabla y agregue la columna si no existe en la función de inicialización.
Instale matraz-migrar con pip o en sus requirements.txt , luego, una vez que agregue su nueva columna en sus modelos:
flask db init flask db migrate -m "Adding column x." flask db upgradeLo que está buscando se llama una migración de base de datos. El uso de algo como Flask-Migrate le permite cambiar el esquema de la base de datos, agregando o eliminando columnas, sin perder sus datos. También crea versiones de estas migraciones de bases de datos para que pueda revertirlas si es necesario.
Flask-Migrate usa el módulo Alambique, por lo que ambos tienen la misma funcionalidad, Flask-Migrate se usa para configurar correctamente el alambique con su aplicación Flask y SQL-Alchemy.
Aquí hay un gran video de Pretty Printed para configurar Flask-Migrate. Tenga en cuenta que Flask-Migrate está diseñado para aplicaciones Flask que utilizan SQL-Alchemy como ORM.
Tienes dos opciones.
Ejecute flask db init para crear el repositorio de migración. Agregue la nueva columna a su modelo de base de datos.
Ejecute flask db migrate para generar una migración. El script de migración solo tendrá la nueva columna.
Ejecute la flask db upgrade para aplicar la nueva migración a su base de datos.
En este punto, su base de datos debería tener la nueva columna y puede continuar trabajando. Repita los pasos anteriores cada vez que necesite realizar cambios adicionales.
Tenga en cuenta que con este enfoque, no puede volver a crear toda la base de datos desde cero. Debe tener una forma de inicializar la base de datos al esquema que tenía el día 1, y luego puede aplicar el historial de migración para actualizarlo a su esquema actual.
Comience con el inicio de la base de datos del flask db init para crear el repositorio de migración. A continuación, debe engañar a Flask-Migrate para que piense que su base de datos está vacía. Puede hacer esto cambiando el nombre de su base de datos real y creando una nueva base de datos con el mismo nombre que no tiene tablas.
En ese estado, ejecute flask db migrate . Esto generará una migración que contiene todo el esquema de su base de datos. Una vez que tenga esa migración inicial, restaure su base de datos al estado correcto.
Ejecute flask db stamp head para marcar la base de datos como actualizada. Agregue la nueva columna a su modelo de base de datos.
Ejecute la flask db migrate de nuevo, para generar una segunda migración. El script de migración solo tendrá la nueva columna.
Ejecute la flask db upgrade para aplicar la nueva migración a su base de datos.