2016-08-20 7 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 
)