通常,我们是先建立 Django 服务,然后通过 Django 的 models 生成数据库。然而,有些时候我们需要反向操作,即从现有数据库生成 Django 的 models。比如,我们需要针对当前数据库,使用 Django 制作 REST 的接口。
1 Django 配置数据库连接参数
新建 Djano项目、app(假设名叫 blogapp)。在 settings.py 中设置数据库的连接参数,参照 Django 与 MySQL 数据库的连接。
2 根据数据库生成 models
首先,需要用 inspectdb
来生成 models.py
,主要的命令是
$ python manage.py inspectdb
假设指定 models,比如 blogapp 下面的 models
$ python manage.py inspectdb > blogapp/models.py
3 models 中的调整 managed = True
对于自己需要的 models,如果需要以后进行 CRUD 增删查改操作,需要在 Meta 中设置 managed = True
。
class PostsPost(models.Model):
title = models.CharField(max_length=150)
content = models.TextField()
timestamp = models.DateTimeField()
updated = models.DateTimeField()
class Meta:
managed = True
db_table = 'posts_post'
4 migrate 时,使用 --fake-initial
首次数据迁移 migrate 时,需要使用 --fake-initial
参数,因为数据库已经存在,不带 --fake
会报错且迁移不成功。
$ python manage.py makemigrations
$ python manage.py migrate --fake-initial
5 测试效果
在 blog/admin.py 中把 models 注册进去。
from django.contrib import admin
from .models import PostsPost
admin.site.register(PostsPost)
使用 admin 进行增删查改,并且在 MySQL 中确认数据库操作成功。
6 使用了 --fake
之后,需要修改 models
如果不再是 —fake
而需要真实改动数据库结构,需要
python manage.py migrate --fake core 0003
python manage.py migrate core
How to redo a migration on django 1.8 after using --fake
备注:
最后需要注意:Django 的整体全局 migrate,会因为出现没找到变化的情况。
$ python manage.py migrate
建议还是制定 app 进行 migrate
$ python manage.py migrate your_app
参考
官方文档最新指南:
官方英文文档:Auto-generate the models
中文的介绍:
已有的数据库集成django orm (Database to Models)
Django Book 一些清理生成的 Models 的建议
关于Django migrate 的两个参数—fake-initial
与 —fake
:
网友评论