2017-10-11 60 views
0

我有一個樣品表檢查升級升級使用蒸餾器

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

現在,我做了一些改變,以我的其他表,也加入到表中「用戶名」欄上面顯示唯一約束表架構之前正常運行。

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

我運行python run.py db migrate命令,並檢測所有更改。沒有任何問題。 現在我跑python run.py db upgrade。這會使數據庫中的所有模式更改都失敗,但會因上述表的唯一約束而失敗,因爲該表已具有重複數據。現在我需要恢復所有數據庫更改回到我以前的版本(我不知道如何去做)。無論如何,在將模式更改提交給數據庫之前,測試所有升級是否正常運行?如果沒有,請幫助我如何恢復所有數據庫更改。

回答

0

蒸餾器把在遷移作爲一個原子的變化而變化。如果遷移中的最後一件事情失敗,那麼整個遷移都會被放棄,因此您始終會留下一個一致的數據庫。

+0

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

+0

不幸的是,MySQL數據庫允許未完成的事務。 –