私が始めたプロジェクト (fyi、ブラウザベースのゲーム) に Django を使用することを検討しています。私が最も気に入っている機能の 1 つは、syncdb
定義した Django モデルに基づいてデータベース テーブルを自動的に作成する機能です (a他のフレームワークには見られない機能です)。ドキュメントでこれを見たとき、私はすでにこれが本当であるには良すぎると思っていました:
Syncdb は既存のテーブルを変更しません
syncdb は、まだインストールされていないモデルのテーブルのみを作成します。インストール後にモデルクラスに加えられた変更に一致するように ALTER TABLE ステートメントを発行することはありません。モデル クラスとデータベース スキーマへの変更には、しばしば何らかの形式のあいまいさが含まれます。そのような場合、Django は正しい変更を推測する必要があります。プロセス中に重要なデータが失われるリスクがあります。
モデルに変更を加え、それに合わせてデータベース テーブルを変更したい場合は、sql コマンドを使用して新しい SQL 構造を表示し、それを既存のテーブル スキーマと比較して変更を確認します。
既存のテーブルの変更は「手作業」で行う必要があるようです。
私が知りたいのは、これを行うための最良の方法です。2 つの解決策が思い浮かびます。
- ドキュメントが示唆するように、DB で手動で変更を行います。
- データベースのバックアップを作成し、ワイプし、テーブルを再度作成します (syncdb を使用して、テーブルを最初から作成しているため)、バックアップしたデータをインポートします (データベースが大きい場合、これには時間がかかりすぎる可能性があります)。
何か案は?