35

Tengo una aplicación web usando sqlalchemy (dentro de Pylons). Necesito cambiar el esquema de manera eficiente para poder cambiar la versión de producción al menos a diario, tal vez más, sin perder los datos.¿Vale la pena usar sqlalchemy-migrate?

He jugado un poco con sqlalchemy-migrate durante el fin de semana y diría que me ha causado una mala impresión. Primero Creo que no puede ayudar con la migración entre dos motores de bases de datos; eso es algo que probablemente podría hacerse solo con sqlalchemy. En segundo lugar, los documentos no parecen actualizados. Tuve que cambiar algunas opciones de línea de comandos, como dar la ruta del repositorio en cada comando, esto podría ser un error de migración.

Pero lo peor es el comando "manage.py test". No solo realmente modifica la base de datos (este punto está claramente indicado en la documentación, no puedo culpar a la migración) pero mi primer script de migración simplemente hizo una simple y estúpida migración de esquemas, dejando el db actualizado con un esquema diferente el original. Pero la "prueba manage.py" simplemente respondió algo así como

success ! 

es decir, que ni siquiera comprobar si el esquema se deja en un estado coherente. Entonces ¿vale la pena usar migrate? ¿Hay alguna ventaja en comparación con el método Hágalo usted mismo asociado con las buenas prácticas as proposed by S.Lott? ¿Existen alternativas a sqlalchemy-migrate simplificando realmente el proceso de migración o simplemente estoy tratando de usar migrar con un a priori (entonces muéstrenme por qué no es claramente superior a crear columnas CSV como se propone en el enlace de arriba) ?

¡Muchas gracias!

Respuesta

54

uso del alambique en su lugar:

http://pypi.python.org/pypi/alembic

Gracias por los comentarios, editado para añadir un poco de razonamiento -

Es desarrollado por el autor de SQLAlchemy, y es totalmente nuevo y bien apoyado. No sé lo suficiente sobre sqlalchemy-migrate para dar una buena comparación. Pero hice una lectura rápida de los claros y concisos documentos Alambique, y luego obtuve mi propia migración generada automáticamente en muy poco tiempo.

Autogeneración: No es su único modo de operación, pero si lo elige, Alembic leerá la configuración sqlalchemy de su aplicación (por ejemplo, sus clases de modelo declarativas que configuran todas sus tablas, restricciones y mapeos) y comparará con la real estado actual de su base de datos, y muestra un script de Python que representa el delta entre los dos. A continuación, pasa esa secuencia de comandos al comando de actualización de Alembic y ahí lo tienes, las diferencias se resuelven. Normalmente se necesita una pequeña cantidad de edición de la secuencia de comandos de migración, y eso es (a) solo la naturaleza de las migraciones, y (b) algo que quiera hacer de todos modos para asegurarse de estar completamente al tanto de los pasos exactos de la migración. va a funcionar antes de ejecutarlo.

Alembic brinda una capacidad DVCS a la forma en que se rastrean sus migraciones, también. Hace que sea realmente fácil volver a cualquier estado pasado de su esquema db.

+1

Escuché Alembic por primera vez, así que revisé el enlace. ¡Qué escrito por Mike Bayer, el autor de SQLAlchemy! Definitivamente voy a probarlo. –

+0

Si usa Flask, le recomiendo usar Alembic junto con Flask-Migrate, que hace que todo sea mucho más fácil. http://flask-migrate.readthedocs.org – fnkr

+0

Seguí tu consejo y cambié, y ahora [Tengo una pregunta] (http://stackoverflow.com/q/27911685/656912). – orome

3

Personalmente me encanta usarlo. Es increíble porque las nuevas instalaciones (dev, test, prod) se pueden iniciar fácilmente. No solo eso, sino que proporciona un hogar para la aplicación a medida que crece y proporciona buenos puntos de entrada para aquellas migraciones que deben tener lugar a medida que se mueve de una versión a otra de la aplicación. Algo necesita realizar el alter/etc en los servidores de desarrollo, pruebas y producción.

¿Es perfecto? Nop. Puede dejar su db en mal estado, pero es por eso que tiene versiones de desarrollo/prueba/producción de cosas.

Personalmente lo uso para arrancar mis pruebas unitarias en torres usando un sqlite db para ejecutar pruebas unitarias en contra, pero usamos mysql en producción. Así que hay algunos beneficios de la plataforma cross db de usarlo.

7

Alambique estar fuera (http://pypi.python.org/pypi/alembic) y mantenido por SQLAlchemy autor y dado el hecho de que el desarrollo sqlalchemy-migrar se ve estancado, con prácticamente ninguna confirmación de este año (http://code.google.com/p/sqlalchemy-migrate/source/list), creo que no vale la pena usarlo más, I' Cambiaré mi proyecto actual a Alambique.

Si todavía se mantuviera en gran medida, estaría seguro de la capacidad del proyecto para mantenerse sincronizado con SQLAlchemy (que era el caso anterior).