2016-08-20 44 views
2

我有一個包含現有表的數據庫。我的代碼有User模型。我使用Flask-Migrate生成了一個修訂版並運行它,並在創建用戶表時刪除了我現有的表。我如何在不移除現有表的情況下運行遷移?運行Flask-Migrate時保留數據庫中的現有表格

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'] = 'my_data' 

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

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

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(128)) 

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

回答

2

如果你在你的數據庫中現有的表,他們沒有在你的代碼進行相應的模型,蒸餾器(燒瓶遷移),只知道有你的數據庫和你的代碼之間的差異。它不能知道(默認情況下)你打算保持這些表格不變。

將一個include_object函數傳遞給環境以影響Alembic將爲其生成命令的數據庫對象。以下示例跳過列出的表名,但允許其他所有內容。

def include_object(object, name, type_, reflected, compare_to): 
    if type_ == 'table' and name in ('table', 'names', 'to', 'skip'): 
     return False 

    return True 

# in env.py 
context.configure(
    # ... 
    include_object=include_object 
) 
相關問題