Python_Flask_簡易ブログシステム開発:データベース移行——Migrate

3138 ワード

Flask-Migrateを使用してデータベースの更新とアップグレードを完了し、Flask-MigrateプラグインはAlembicベースであり、AlembicはSQLAlchemyの著者によって開発されたデータ移行ツールです.
操作手順:
  • Flask-Migrateプラグイン
  • をインストール
    (venv) $ pip install Flask-Migrate
    
  • Flask Appセクションのコードを変更し、Migrate関連Command
  • を追加
    db = SQLAlchemy(app)
    migrate = Migrate(app, db)
     
    manager = Manager(app)
    manager.add_command('db', MigrateCommand)
    
  • 初期化
  • python manage.py db init
    
  • マイグレーションウェアハウス
  • の作成
    まずflask-migrateプラグインをインストールする必要があります
    (venv) $ pip install flask-migrate
    

    次に、初期化を完了する方法について説明します.
    manage.py
    
    from flask.ext.migrate import Migrate, MigrateCommand 
     
    # ...
     
    migrate = Migrate(app, db)
    manager.add_command('db', MigrateCommand)
    

    データベースの移行を維持する前に、initサブコマンドを使用して移行ライブラリを作成する必要があります.
    (venv) $ python manage.py db init
    

    このコマンドはmigrationsフォルダを作成し、すべての移行スクリプトが格納されます.
      Creating directory /home/adark0915/PycharmProjects/flasky/migrations ... done
      Creating directory /home/adark0915/PycharmProjects/flasky/migrations/versions
      ... done
      Generating /home/adark0915/PycharmProjects/flasky/migrations/README ... done
      Generating /home/adark0915/PycharmProjects/flasky/migrations/script.py.mako ... done
      Generating /home/adark0915/PycharmProjects/flasky/migrations/alembic.ini ... done
      Generating /home/adark0915/PycharmProjects/flasky/migrations/env.pyc ... done
      Generating /home/adark0915/PycharmProjects/flasky/migrations/env.py ... done
      Please edit configuration/connection/logging settings in
      '/home/adark0915/PycharmProjects/flasky/migrations/alembic.ini' before
      proceeding.
    
    
  • 移行スクリプトの作成
  • (venv) $ python hello.py db migrate -m "initial migration"
    

    Alembicでは、データベースの移行作業は移行スクリプトによって完了します.このスクリプトにはupgrade()とdowngrade()という2つの関数があります.upgrade()関数はデータベースの変更を実施し、移行の一部であり、downgrade()関数は削除します.
    INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
    INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    INFO  [alembic.autogenerate.compare] Detected added column 'users.default'
    INFO  [alembic.autogenerate.compare] Detected added column 'users.permissions'
    INFO  [alembic.autogenerate.compare] Detected added index 'ix_users_default' on '['default']'
      Generating /home/adark0915/PycharmProjects/flasky/migrations/versions/d5ddba7501
      2e_initial_migration.py ... done
    
  • 更新データベース
  • (venv) $ python hello.py db upgrade
    
    INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
    INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    INFO  [alembic.runtime.migration] Running upgrade  -> d5ddba75012e, initial migration
    /home/adark0915/PycharmProjects/flasky/venv/local/lib/python2.7/site-packages/alembic/util/messaging.py:69: UserWarning: Skipping unsupported ALTER for creation of implicit constraint
      warnings.warn(msg)
    

    これにより、データベースの更新とアップグレードが完了します.