0

最近、モデルの 1 つに新しいフィールドを追加しましたが、データベースのテーブルに適切な列を追加するのを忘れていました。このモデルの新しいインスタンスの追加と既存のインスタンスの変更をテストするテスト ケースがあります。これらのテスト ケースはどちらも失敗しませんでした。しかし、ライブサイトでインスタンスを変更しようとすると、

DatabaseError そのような列はありません

TestCase 内からこのエラーを検出しようと試みましたが、そのような運はありませんでした。

どんな助けでも大歓迎です。

4

3 に答える 3

1

問題は、テストに本番データベースを使用しないことです (本当に望んでいます)。そのため、検出できるのは、(おそらく)最初から再作成されたテスト データベースに列が存在しないことだけです。モデル定義に基づいており、実稼働データベースに列が欠落しているわけではありません。

この問題に対するより良いアプローチは、Southなどの移行ツールを使用し、新しいコードがデプロイされるときに移行が実行されるようにデプロイ プロセスを自動化することです。

これは小規模な (っぽい) サイトでのみ機能します。トラフィックの多いサイトでは、単純に移行を実行すると問題が発生することがあります。そのような状況にある場合は、スキーマの変更に関する David Cramer の記事が参考になるかもしれません。

于 2011-11-16T08:50:20.297 に答える
0

残念ながら、syncdbコマンドを使用するだけではデータベースを更新できません。

データベース管理システムを使用してフィールドを手動で挿入するか、Southなどのソリューションを使用できます。

于 2011-11-16T08:57:24.973 に答える
0

次のリンクを問題の説明として使用してください。

http://amionrails.wordpress.com/2013/11/17/django-databaseerror-no-such-column-error/

于 2014-09-17T12:07:39.753 に答える