Flask-Migrate 拡張機能を使用して Python の Flask フレームワークでデータベースを移行するチュートリアル
システムをアップグレードする際、サーバー側のデータ構造やその他の操作を更新する必要が生じることがよくあります。以前の方法では、SQL スクリプトを手動で作成していましたが、漏れが見つかり、プログラムが実行できなくなることがよくありました。サーバーにリリースされた後は通常どおり使用されます。
Flask-Migrate プラグインを使用して問題を解決できます。Flask-Migrate プラグインは、有名な SQLAlchemy 作者によって開発されたデータ移行ツールです。
具体的な操作は次のとおりです。
1. Flask-Migrate プラグインをインストールします
$ pip install 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 コマンドはテーブルを更新しますが、テーブルの内容には影響しません。

Tomergelistsinpython、あなたはオペレーター、extendmethod、listcomfulting、olitertools.chain、それぞれの特異的advantages:1)operatorissimplebutlessforlargelist;

Python 3では、2つのリストをさまざまな方法で接続できます。1)小さなリストに適したオペレーターを使用しますが、大きなリストには非効率的です。 2)メモリ効率が高い大規模なリストに適した拡張方法を使用しますが、元のリストは変更されます。 3)元のリストを変更せずに、複数のリストをマージするのに適した *オペレーターを使用します。 4)Itertools.chainを使用します。これは、メモリ効率が高い大きなデータセットに適しています。

Join()メソッドを使用することは、Pythonのリストから文字列を接続する最も効率的な方法です。 1)join()メソッドを使用して、効率的で読みやすくなります。 2)サイクルは、大きなリストに演算子を非効率的に使用します。 3)リスト理解とJoin()の組み合わせは、変換が必要なシナリオに適しています。 4)redoce()メソッドは、他のタイプの削減に適していますが、文字列の連結には非効率的です。完全な文は終了します。

pythonexexecutionistheprocessoftransforningpythoncodeintoexecutabletructions.1)interpreterreadSthecode、変換intobytecode、thepythonvirtualmachine(pvm)executes.2)theglobalinterpreeterlock(gil)管理委員会、

Pythonの主な機能には次のものがあります。1。構文は簡潔で理解しやすく、初心者に適しています。 2。動的タイプシステム、開発速度の向上。 3。複数のタスクをサポートするリッチ標準ライブラリ。 4.強力なコミュニティとエコシステム、広範なサポートを提供する。 5。スクリプトと迅速なプロトタイピングに適した解釈。 6.さまざまなプログラミングスタイルに適したマルチパラダイムサポート。

Pythonは解釈された言語ですが、コンパイルプロセスも含まれています。 1)Pythonコードは最初にBytecodeにコンパイルされます。 2)ByteCodeは、Python Virtual Machineによって解釈および実行されます。 3)このハイブリッドメカニズムにより、Pythonは柔軟で効率的になりますが、完全にコンパイルされた言語ほど高速ではありません。

useaforloopwhenteratingoverasequenceor foraspificnumberoftimes; useawhileloopwhentinuninguntinuntilaConditionismet.forloopsareidealforknownownownownownownoptinuptinuptinuptinuptinutionsituations whileoopsuitsituations withinterminedationations。

pythonloopscanleadtoErrorslikeinfiniteloops、ModifiningListsDuringiteration、Off-Oneerrors、Zero-dexingissues、およびNestededLoopinefficiencies.toavoidhese:1)use'i


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

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

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

メモ帳++7.3.1
使いやすく無料のコードエディター
