2016-08-20 13 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 
) 
関連する問題