2017-10-11 3 views
0

J'ai un échantillon TableauVérifiez si les mises à jour fonctionnent correctement avant la mise à niveau schéma de table à l'aide Alambic

class a(Base): 
    __tablename__ = 'a' 
    id = Column(Integer,primary_key=True) 
    username = Column(VARCHAR(255)) 

Maintenant, je fait quelques changements à mes autres tables et a également ajouté contrainte unique à la colonne « nom d'utilisateur » dans le tableau ci-dessus .

class a(Base): 
    __tablename__ = 'a' 
    id = Column(Integer,primary_key=True) 
    username = Column(VARCHAR(255),unique=True) # unique key added. 

Je cours commande python run.py db migrate et il détecte toutes les modifications. Pas de problème. Je passe maintenant python run.py db upgrade. Cela entraîne toutes les modifications de schéma dans la base de données mais échoue à la contrainte unique de la table mentionnée ci-dessus, car cette table contient déjà des données répétées. Maintenant, j'ai besoin de revenir sur tous les changements de db pour revenir à ma version précédente (je ne peux pas comprendre comment le faire). Existe-t-il un moyen de tester si toutes les mises à niveau s'exécutent correctement avant de valider les modifications de schéma dans la base de données? Sinon, aidez-moi s'il vous plaît à rétablir tous les changements de DB. Alembic traite les changements dans une migration comme un changement atomique.

Répondre

0

Si la dernière chose dans votre migration échoue, alors la migration entière est rejetée, vous êtes donc toujours avec une base de données cohérente.

+0

https://stackoverflow.com/questions/17894240/how-to-clean-up-incomplete-alembic-run –

+0

Malheureusement, mysql db permet des transactions incomplètes. –