django中清理makemigrations的方法

2018-09-14 0 条评论 329 次阅读 0 人点赞

1. 简介

1.1 为什么要复用migrations?

很多时候,我们需要重建我们的数据库,例如:从演示时使用sqlite,到发布时使用MySQL;又或者我们在开发时,需要重置数据库;又或者我们发布前需要清空/重置数据库。

1.2 它们究竟在背后做了什么?

我们先来回顾在django的项目中,与数据库同步的操作:

  • python manage.py makemigrations 创建数据库schema的快照;
    它背后的操作是:
    1)在app中创建migration目录,并把schema的快照以文件的格式记录下来,文件名类似:0001.initial.py;
    2)每次操作,都会记录操作日志到表:
mysql> select * from django_migrations;
+----+--------------+------------------------------------------+---------------------+
| id | app | name | applied |
+----+--------------+------------------------------------------+---------------------+
| 1 | contenttypes | 0001_initial | 2018-06-13 05:02:15 |
| 2 | auth | 0001_initial | 2018-06-13 05:02:16 |
| 3 | admin | 0001_initial | 2018-06-13 05:02:16 |
| 4 | admin | 0002_logentry_remove_auto_add | 2018-06-13 05:02:16 |
| 5 | contenttypes | 0002_remove_content_type_name | 2018-06-13 05:02:16 |
| 6 | auth | 0002_alter_permission_name_max_length | 2018-06-13 05:02:16 |
| 7 | auth | 0003_alter_user_email_max_length | 2018-06-13 05:02:16 |
| 8 | auth | 0004_alter_user_username_opts | 2018-06-13 05:02:16 |
| 9 | auth | 0005_alter_user_last_login_null | 2018-06-13 05:02:16 |
| 10 | auth | 0006_require_contenttypes_0002 | 2018-06-13 05:02:16 |
| 11 | auth | 0007_alter_validators_add_error_messages | 2018-06-13 05:02:16 |
| 12 | auth | 0008_alter_user_username_max_length | 2018-06-13 05:02:16 |
| 13 | auth | 0009_alter_user_last_name_max_length | 2018-06-13 05:02:16 |
| 14 | sessions | 0001_initial | 2018-06-13 05:02:17 |
| 15 | cmdb | 0001_initial | 2018-06-13 05:05:03 |
+----+--------------+------------------------------------------+---------------------+
15 rows in set (0.00 sec)
  • python manage.py migrate 同步数据库结构;

2. 复用它们

1)删除app下的migrations目录;
2)创建新的库,授权后,并修改settings.py中的数据库连接(指定到新库);
3)创建基本表

python manage.py migrate

4)创建app的migrations,例如app名为cmdb;

python manage.py makemigrations cmdb
python manage.py migrate cmdb

掌柜

让未来超越过去!

文章评论(0)