2015-11-24 28 views
1

這裏是我的移民文件:燒瓶遷移似乎要刪除我的所有數據庫數據

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 
from flask_script import Manager 
from flask_migrate import Migrate, MigrateCommand 
import models 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + 'C:\\flaskDB\\commBorn3.db' 

db = SQLAlchemy(app) 
migrate = Migrate(app, db) 

manager = Manager(app) 
manager.add_command('db', MigrateCommand) 



if __name__ == '__main__': 
    manager.run() 

我跑的標準命令:

python app.py db init 

python app.py db migrate 

python app.py db upgrade 

產生的數據庫是相同名稱的文件有關kb中的大小相同,但只有一個表,「alembic_version」沒有任何內容。我試圖降級,發現我所有的表格都返回了,但它們都是空的。我做錯了什麼?所有數據隱藏在哪裏(相同的文件大小)?

+0

我要指出,我已經刪除了來自各個表列和刪除其他表? – user442920

回答

5

您應該始終檢查在db migrate之後創建的migrations/versions中的遷移文件,並且只有在一切看起來都正常時才執行db upgrade

問題是,在models.py中,您從「普通」應用導入db = SQLAlchemy(app)實例,而不是從遷移腳本導入。所以在遷移腳本中,實際上並沒有定義任何模型,這就是爲什麼它會刪除數據庫中的所有表。

的解決方案很簡單:只需使用遷移腳本的應用背景下,當您導入模型:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 
from flask_script import Manager 
from flask_migrate import Migrate, MigrateCommand 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + 'C:\\flaskDB\\commBorn3.db' 

db = SQLAlchemy(app) 

# Import database models with app context 
with app.app_context(): 
    from models import * 

migrate = Migrate(app, db) 

manager = Manager(app) 
manager.add_command('db', MigrateCommand) 

if __name__ == '__main__': 
    manager.run()