これは不正確で複雑すぎる回答であることに注意してください
ここindex.create
で言われたように使うのが正しいやり方です。
まず、データベースの最新のスナップショットがあり、このスナップショットからデータベースを復元できることを確認してください。
中規模および大規模なプロジェクト (同時に複数のバージョンをサポートする必要があり、複数の環境にインストールされるプロジェクト) には、「データベース移行」と呼ばれるデータベース管理ライフサイクルの一部である特別な手順があります。DB の移行には、既存のスキーマへの変更が含まれます。SQLAlchemy はそのままでは移行をサポートしていません。
SQLAlchemy と互換性のあるデータベース移行ツールが 2 つあります。
これらのツールの詳細とリンクについては、SQLAlchemy ドキュメント ページのAltering Schemas through Migrations を参照してください。
ただし、小規模なプロジェクトで作業している場合は、データベース コマンド ライン ユーティリティから、または Python スクリプトで connection.execute() を介して ALTER TABLE DDL クエリを手動で実行することをお勧めします。
私が現在取り組んでいる本番アプリケーションでは、アプリケーションの最新バージョンを 1 つだけサポートしています。データベース スキーマの変更ごとに、次の手順を実行します。
- 本番データベースのスナップショットを作成する
- このスナップショットを開発環境にロードする
- sqlalchemy データ モデル モジュールの更新
- テーブル変更クエリを準備して実行し、後で使用するためにこのクエリを保存します
- コードに他の関連する変更を加える
- 開発環境でテストを実行する
- コードの最新バージョンを本番環境にデプロイする
- 本番環境でテーブルを変更する
また、テーブル/インデックス作成クエリを生成するために次のトリックを使用しています。アプリケーションを新しいデータベースにポイントし、sqlalchemy クエリのログを有効にして実行します。metadata.create_all()
そのため、ログ (または STDOUT) に、sqlalchemy によって生成されたクエリの作成が表示されます。
使用しているデータベース システムによって、インデックス作成クエリは少し異なります。一般的なクエリは次のようになります。
create index targets_i on targets(url);