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 でハマりまくっておれはアホか