Est-ce que cela vaut la peine d'utiliser sqlalchemy-migrate? [fermé]

j'ai une application web en utilisant sqlalchemy (au sein de Pylons). Je dois effectivement changer le schéma pour pouvoir changer la version de production au moins sur une base quotidienne, peut-être plus, sans perdre les données.

j'ai joué un peu avec sqlalchemy-la migration, le week-end et je dirais qu'il m'a donné une mauvaise impression. Premier je pense qu'il ne peut pas aider à la migration entre deux moteurs de bases de données ; c'est quelque chose qui pourrait probablement fait avec sqlalchemy seul. Deuxièmement, les documents ne semblent pas à jour. J'ai dû changer certaines options en ligne de commande, comme donner le chemin du dépôt à chaque commande, cela pourrait être un bug de migrate.

mais le pire, c'est que ... manage.py test " commande. Non seulement il modifie réellement la base de données (ce point est clairement indiqué dans la documentation donc je ne peux pas blâmer migrate) mais mon premier script de migration juste fait simple stupide migration de schéma, laissant le DB amélioré-déclassé avec un schéma différent que l'original . Mais le "manage.py test" vient de répondre à quelque chose comme

 success !

C'est-à-dire qu'il n'a même pas vérifié si le schéma était resté dans un état cohérent. Donc vaut-il la peine d'utiliser migrate? Est-il un avantage par rapport à la Faire Vous-même méthode associée à de bonnes pratiques proposé par S. Lott ? Y a-t-il des alternatives à sqlalchemy-migrate simplifiant réellement le processus de migration ou est-ce que j'essaye juste d'utiliser migrate avec un mauvais a priori (alors s'il Vous Plaît me montrer pourquoi n'est pas clairement supérieur à la création de colonnes CSV comme proposé dans le lien ci-dessus)?

Merci Beaucoup!

40
demandé sur Community 2010-11-18 01:14:27

3 réponses

utiliser Alembic à la place:

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

Merci pour les commentaires, édité pour ajouter un peu de raisonnement --

il est développé par L'auteur de SQLAlchemy, et il est tout nouveau et bien soutenu. Je ne sais pas assez sur sqlalchemy-migrer pour donner une bonne comparaison. Mais j'ai rapidement lu les documents Alembiques clairs et concis, puis j'ai eu ma propre migration autogénérée. de travail dans un temps très court.

Autogénération: ce n'est pas le seul mode d'opération, mais si vous le choisissez, Alembic Lira la configuration sqlalchemy de votre application (par exemple, vos classes de modèles déclaratifs qui configurent toutes vos tables, contraintes et mappages) et comparera à l'état actuel de votre base de données, et produira un script Python qui représente le delta entre les deux. Vous passez alors ce script à la commande de mise à niveau D'Alembic et là vous allez, le les différends sont résolus. Une petite quantité d'édition du script de migration à la main est habituellement nécessaire, et c'est (a) juste la nature des migrations, et (b) quelque chose que vous voulez faire de toute façon pour vous assurer que vous étiez pleinement conscient des étapes exactes que la migration va effectuer avant de l'exécuter.

Alembic apporte une capacité DVCS-like À la façon dont vos migrations sont suivies, aussi. Il rend vraiment facile de revenir à n'importe quel état passé de votre schéma de base de données.

62
répondu cdaddr 2012-06-21 14:01:57

Alembic being out ( http://pypi.python.org/pypi/alembic ) et maintenu par L'auteur de SQLAlchemy et compte tenu du fait que le développement de sqlalchemy-migrate semble bloqué, avec pratiquement aucun engage cette année ( http://code.google.com/p/sqlalchemy-migrate/source/list ), je pense qu'il n'est pas la peine de l'utiliser plus , je vais passer mon projet actuel à Alembic.

S'il était encore lourdement maintenu, je serais confiant sur la capacité du projet de garder synchronisé avec SQLAlchemy ( qui était le cas avant ).

7
répondu Kel Solaar 2012-10-23 07:58:15

j'aime personnellement l'utiliser. C'est génial parce que les nouvelles installations (dev, test, prod) peuvent être démarrées très facilement. Non seulement cela, mais il fournit une maison pour l'application comme il se développe et fournit de bons points d'entrée pour les migrations qui doivent avoir lieu pendant que vous passez d'une version à l'autre de votre application. Quelque chose doit effectuer l'alter/etc sur le dev, les tests, et les serveurs de production.

Est-il parfait? Nope. Vous pouvez laisser votre corps dans un mauvais état, mais c'est pourquoi vous avez dev/test/production versions de choses.

personnellement je l'utilise pour bootstrap mes tests d'unité dans les pylônes en utilisant un sqlite db pour exécuter des tests d'unité contre, mais nous utilisons mysql dans la production. Il y a donc des avantages à l'utiliser sur les plates-formes Cross db.

3
répondu Rick 2010-11-18 01:07:04