検索
ホームページバックエンド開発Python チュートリアルFlask-Migrate 拡張機能を使用して Python の Flask フレームワークでデータベースを移行するチュートリアル

システムをアップグレードする際、サーバー側のデータ構造やその他の操作を更新する必要が生じることがよくあります。以前の方法では、SQL スクリプトを手動で作成していましたが、漏れが見つかり、プログラムが実行できなくなることがよくありました。サーバーにリリースされた後は通常どおり使用されます。

Flask-Migrate プラグインを使用して問題を解決できます。Flask-Migrate プラグインは、有名な SQLAlchemy 作者によって開発されたデータ移行ツールです。

具体的な操作は次のとおりです。

1. Flask-Migrate プラグインをインストールします

$ pip install Flask-Migrate

2. Flask アプリ部分のコードを変更して、Migrate 関連のコマンドを追加します
db = SQLAlchemy(app)
migrate = Migrate(app, db)

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

3. 初期化

$ python app.py db init

Flask-Migrate を使用してデータベースを移行する
開発が進むにつれて、データベース モデルを変更する必要があることがわかり、その場合はデータベースを更新する必要があります。

Flask-SQLAlchemy は、データベース テーブルが存在しなくなった場合にのみモデルからデータベース テーブルを作成するため、テーブルを更新する唯一の方法は古いテーブルを破棄することです。当然、データベース内のすべてのデータが失われます。

より良い解決策は、データベース移行フレームワークを使用することです。ソース コード バージョン管理ツールがソース コード ファイルへの変更を追跡するのと同じように、データベース移行フレームワークはデータベース モデルへの変更を追跡し、増分変更をデータベースに適用します。

SQLAlchemy の主な開発者は Alembic 移行フレームワークを作成しましたが、Alembic は直接使用しません。Flask アプリケーションは、Flask-Script を統合してすべての操作コマンドを提供する軽量の Alembic パッケージである Flask-Migrate 拡張機能を使用できます。

4. 移行ウェアハウスを作成します

まず、Flask-Migrate が仮想環境にインストールされている必要があります:

(venv) $ pip install flask-migrate

次に、拡張機能がどのように初期化されるかを示します:

from flask.ext.migrate import Migrate, MigrateCommand 

# ...

migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)

データベース移行コマンドを使用するために、Flask-Migrate は Flask-Script マネージャー オブジェクトに接続するための MigrateCommand クラスを提供します。この例では、コマンドへの接続に db が使用されます。

データベースの移行を維持するには、init サブコマンドを使用して移行ライブラリを作成する必要があります。

(venv) $ python hello.py db init
 Creating directory /home/flask/flasky/migrations...done
 Creating directory /home/flask/flasky/migrations/versions...done
 Generating /home/flask/flasky/migrations/alembic.ini...done
 Generating /home/flask/flasky/migrations/env.py...done
 Generating /home/flask/flasky/migrations/env.pyc...done
 Generating /home/flask/flasky/migrations/README...done
 Generating /home/flask/flasky/migrations/script.py.mako...done
 Please edit configuration/connection/logging settings in
 '/home/flask/flasky/migrations/alembic.ini' before proceeding.

このコマンドは、すべての移行スクリプトを保存する移行フォルダーを作成します。

推奨事項: GitHub 上でアプリケーションのクローンを作成している場合は、git checkout 5c を実行して、このバージョンのアプリケーションに切り替えることができます。

5. 移行スクリプトを作成します

Alembic では、データベースの移行作業は移行スクリプトによって完了します。このスクリプトには、upgrade() と downgrade() という 2 つの関数があります。 upgrade() 関数は移行の一部としてデータベースの変更を実装し、downgrade() 関数はそれらを削除します。 Alembic はデータベースの変更を追加および削除する機能を備えており、履歴の任意の時点からデータベースを再構成できます。

Alembic の移行は、手動で作成することも、リビジョン コマンドと移行コマンドを使用して自動で作成することもできます。手動移行では、Alembic の Operations オブジェクト ディレクティブを使用して実装された空の upgrade() 関数と downgrade() 関数を使用して、開発者によって移行フレームワーク スクリプトが作成されます。一方、自動移行では、モデル定義とデータベースの現在の状態との相違点を探して、upgrade() および downgrade() のコードを生成します。

警告: 自動移行は必ずしも正確であるとは限らず、一部の詳細が見落とされる可能性があります。したがって、自動的に生成された移行スクリプトは常に確認する必要があります。
merge サブコマンドは自動移行スクリプトを作成します:

(venv) $ python hello.py db migrate -m "initial migration"
INFO [alembic.migration] Context impl SQLiteImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate] Detected added table 'roles'
INFO [alembic.autogenerate] Detected added table 'users'
INFO [alembic.autogenerate.compare] Detected added index
'ix_users_username' on '['username']'
 Generating /home/flask/flasky/migrations/versions/1bc
 594146bb5_initial_migration.py...done

推奨事項: GitHub 上でアプリケーションのクローンを作成している場合は、git checkout 5c を実行して、このバージョンのアプリケーションに切り替えることができます。このアプリケーションの移行を生成する必要はないことに注意してください。すべての移行スクリプトはリポジトリに含まれています。
6. データベースを更新します

移行スクリプトがレビューされて承認されたら、db upgrade コマンドを使用してデータベースに更新できます。

(venv) $ python hello.py db upgrade
INFO [alembic.migration] Context impl SQLiteImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
INFO [alembic.migration] Running upgrade None -> 1bc594146bb5, initial migration

最初の移行は実際には db.create_all() を呼び出すことと同じですが、後続の移行では、upgrade コマンドはテーブルを更新しますが、テーブルの内容には影響しません。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonの学習:2時間の毎日の研究で十分ですか?Pythonの学習:2時間の毎日の研究で十分ですか?Apr 18, 2025 am 12:22 AM

Pythonを1日2時間学ぶだけで十分ですか?それはあなたの目標と学習方法に依存します。 1)明確な学習計画を策定し、2)適切な学習リソースと方法を選択します。3)実践的な実践とレビューとレビューと統合を練習および統合し、統合すると、この期間中にPythonの基本的な知識と高度な機能を徐々に習得できます。

Web開発用のPython:主要なアプリケーションWeb開発用のPython:主要なアプリケーションApr 18, 2025 am 12:20 AM

Web開発におけるPythonの主要なアプリケーションには、DjangoおよびFlaskフレームワークの使用、API開発、データ分析と視覚化、機械学習とAI、およびパフォーマンスの最適化が含まれます。 1。DjangoandFlask Framework:Djangoは、複雑な用途の迅速な発展に適しており、Flaskは小規模または高度にカスタマイズされたプロジェクトに適しています。 2。API開発:フラスコまたはdjangorestFrameworkを使用して、Restfulapiを構築します。 3。データ分析と視覚化:Pythonを使用してデータを処理し、Webインターフェイスを介して表示します。 4。機械学習とAI:Pythonは、インテリジェントWebアプリケーションを構築するために使用されます。 5。パフォーマンスの最適化:非同期プログラミング、キャッシュ、コードを通じて最適化

Python vs. C:パフォーマンスと効率の探索Python vs. C:パフォーマンスと効率の探索Apr 18, 2025 am 12:20 AM

Pythonは開発効率でCよりも優れていますが、Cは実行パフォーマンスが高くなっています。 1。Pythonの簡潔な構文とリッチライブラリは、開発効率を向上させます。 2.Cのコンピレーションタイプの特性とハードウェア制御により、実行パフォーマンスが向上します。選択を行うときは、プロジェクトのニーズに基づいて開発速度と実行効率を比較検討する必要があります。

Python in Action:実世界の例Python in Action:実世界の例Apr 18, 2025 am 12:18 AM

Pythonの実際のアプリケーションには、データ分析、Web開発、人工知能、自動化が含まれます。 1)データ分析では、PythonはPandasとMatplotlibを使用してデータを処理および視覚化します。 2)Web開発では、DjangoおよびFlask FrameworksがWebアプリケーションの作成を簡素化します。 3)人工知能の分野では、TensorflowとPytorchがモデルの構築と訓練に使用されます。 4)自動化に関しては、ファイルのコピーなどのタスクにPythonスクリプトを使用できます。

Pythonの主な用途:包括的な概要Pythonの主な用途:包括的な概要Apr 18, 2025 am 12:18 AM

Pythonは、データサイエンス、Web開発、自動化スクリプトフィールドで広く使用されています。 1)データサイエンスでは、PythonはNumpyやPandasなどのライブラリを介してデータ処理と分析を簡素化します。 2)Web開発では、DjangoおよびFlask Frameworksにより、開発者はアプリケーションを迅速に構築できます。 3)自動化されたスクリプトでは、Pythonのシンプルさと標準ライブラリが理想的になります。

Pythonの主な目的:柔軟性と使いやすさPythonの主な目的:柔軟性と使いやすさApr 17, 2025 am 12:14 AM

Pythonの柔軟性は、マルチパラダイムサポートと動的タイプシステムに反映されていますが、使いやすさはシンプルな構文とリッチ標準ライブラリに由来しています。 1。柔軟性:オブジェクト指向、機能的および手続き的プログラミングをサポートし、動的タイプシステムは開発効率を向上させます。 2。使いやすさ:文法は自然言語に近く、標準的なライブラリは幅広い機能をカバーし、開発プロセスを簡素化します。

Python:汎用性の高いプログラミングの力Python:汎用性の高いプログラミングの力Apr 17, 2025 am 12:09 AM

Pythonは、初心者から上級開発者までのすべてのニーズに適した、そのシンプルさとパワーに非常に好まれています。その汎用性は、次のことに反映されています。1)学習と使用が簡単、シンプルな構文。 2)Numpy、Pandasなどの豊富なライブラリとフレームワーク。 3)さまざまなオペレーティングシステムで実行できるクロスプラットフォームサポート。 4)作業効率を向上させるためのスクリプトおよび自動化タスクに適しています。

1日2時間でPythonを学ぶ:実用的なガイド1日2時間でPythonを学ぶ:実用的なガイドApr 17, 2025 am 12:05 AM

はい、1日2時間でPythonを学びます。 1.合理的な学習計画を作成します。2。適切な学習リソースを選択します。3。実践を通じて学んだ知識を統合します。これらの手順は、短時間でPythonをマスターするのに役立ちます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。