cloverrose's blog

Python, Machine learning, Emacs, CI/CD, Webアプリなど

ALTER TABLEでカラムを追加

作業の前にバックアップ

kamonama@Blogger: MySQLでDBをコピーするには

$ mysql -u root -p
mysql> create database mydb_full_back;
mysql> exit;
$ 
$ mysqldump -u root -p -n mydb | mysql -u root -p mydb_full_back

settings.pyでバックアップデータベースに切り替える

'NAME' : 'mydb_full_back'
$ sudo apachectl restart

models.pyを編集

class Event(models.Model):
  [...]
  point=models.IntegerField()
  [...]

更新

$ sudo apachectl restart

今までのデータに値を設定

$ python manage.py shell
>>> from mysite.cal.models import Event
>>> for event in Event.objects.all():
...    p=event.ususer_set.count()
...    event.point=p
...    event.save()
...

うまくいくようなので本番用のデータベースに対しても同様の処理をする

追記

mysqld restartってなんなんだ?

BooleanFieldの追加

MySQLではBooleanの代わりにTINYINT
モデルフィールドリファレンス — Django v1.1 documentation

ALTER TABLE cal_event ADD COLUMN is_new TINYINT DEFAULT 1;
class Event(models.Model):
  [...]
  is_new=models.BooleanModel(default=True)