Southでハマりまくった話

仕様検討と実装検討……のはずガッ!

いろいろあって DB がなんかうまく最新状態にならなくてハマりまくった。以下メモ

South とは

Django の DB を管理するツールです。マイグレーションツール。よくわかんないけど、複数人で MySQL とかで管理するときにいちいち drop database するのはあまりにもアレなので、バージョン管理ツールみたいなものです。

警告文をちゃんと読む

エラーメッセージにこんなのがあります

! You *might* be able to recover with:   = DROP TABLE `hoge_moge_table` CASCADE; []

はい、ちゃんと drop table しましょう。また create table の場合もあるので、適宜コピーしましょう。僕は tmux のコピーモードでアレしましたが、 screen ならそれはそれで。ターミナルならそれはそれで。警告文が長くて流れやすいので気をつけましょう。

実行した migrate を取り消してもう一度実行したい

はい、 south_migrationhistory という table があるので、そこに実行した history があるので再度実行したいレコードを消しましょう。

delete from south_migrationhistory where id = ...;
delete from south_migrationhistory where hoge_name ='...';

そしたら再度 migrate しましょう

python manage.py migrate --settings=...

なんか foreignkey の制約で drop table できない!

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

えーだってリレーションあるテーブル全部消したのに……と思ったら素直にググったら情報がありました
参考::ERROR 1217 (23000): Cannot delete or update|linux-555

# foreignkey 制約をはずす
set foreign_key_checks = 0;
# foreignkey 制約をつける
set foreign_key_checks = 1;

はい

オチはない

肝心の仕様検討じゃなくて South でハマりまくっておれはアホか