1

最近、私は Django で Web 開発を学ぼうとしていますが、とても満足しています...

しかし、特に厄介なことが 1 つあります。特に、django の背後にある「単純さ」の哲学について考えた場合です。

私が経験したように、djangoでテーブルを更新することは単純さとはほど遠いということです。

たとえば、実際のケースと同じように、最初にエントリ タイトルのスラッグ フィールドを追加することをスキップしました。しかし、しばらくして、テーブルにスラッグ列を追加したいと思いました.Djangoの新人である誰もが期待するように、python manage.py syncdbコマンドを試してみました. そしてもちろんうまくいきませんでした...少し検索したところ、「dbshel​​lコマンドラインに新しい列を「手動で」追加する必要がある」ことがわかりました(使用しているデータベースはmysqlです)。

理由はわかりませんが、django で Web サイトを簡単に作成できることを知った後では、これはまったくおかしな話だと思います。皆さんもそう思いませんか?または、他に解決策や今後の予定がある場合は、共有していただけますか?

前もって感謝します...

PS。シェルでdbと仲良くするのは構いませんが、知りたいのは、djangoでなぜそうなのかということです...

4

5 に答える 5

6

データベースの移行は django プロジェクトの目標ですが、最初のいくつかのバージョンでは終わらないほど難しいトピックでした。このギャップを埋めるために多数の移行プロジェクトが登場し、それぞれがさまざまな方法で困難な問題を解決しています。追加の移行ソリューションを作成しようとしたり、いずれかが成熟する前に「公式」ステータスを付与したり、少なくとも単一の優先ソリューションとして登場したりするのではなく、django チームはそれらのソリューションを進化させ、作物から 1 つを選択することにしました。後日、django とともに出荷されます。

これらのサードパーティの移行ツールの詳細については、この質問への回答をご覧ください。

于 2009-07-22T23:10:04.350 に答える
3

私はこのような問題を防ぐためにSouthを使用しています (ただし、フィールドの名前変更には問題があるようです)。

この動作は、Django がサポートするさまざまな DB バックエンドが原因である可能性があると思います。これらのリリース ノートによると、Django 1.1RC に変更はありません。

于 2009-07-22T23:07:51.763 に答える
1

上記の回答のいくつかには、良い情報があります。ただし、質問に基づいて、質問者はmanage.pyでリセットコマンドを使用していない可能性があります。開発プロセス中にモデルとデータを構築するとき、保持する必要のあるデータがない可能性があります。シード データは initial_data ( http://docs.djangoproject.com/en/dev/howto/initial-data/ ) として保存でき、データベースのリセットおよび同期時に自動または手動で追加できます。

開発中は、ロード可能なさまざまなデータ セットを保持し、manage.py でリセット コマンドを自由に使用することが、進化するモデルを操作するための鍵となります。ただし、本番環境に入ると、移行ツール (または手動の DB 調整) が不可欠になります。

于 2009-07-23T15:58:32.293 に答える
1

実際、 Southは Django の移行を非常にうまく処理しています。Web サイトには、簡単に入手できる優れたドキュメントがあります。

于 2012-09-22T16:31:44.430 に答える
0

彼らは、最小限の労力で迅速かつ簡単にデータベースを作成できるようにしました。残念ながら、テーブルを簡単に更新することはできませんでした。手動で ALTER TABLE を実行する必要があります。彼らは Django 1.1 でこれを修正しようとしているのかもしれませんが、それについては完全にはわかりません。

于 2009-07-22T22:57:22.020 に答える