[Django笔记] 从已有的数据库构建应用

Django适合从零开始构建,所谓 'Green-field' 开发。那么当我需要基于已存在的数据库构建应用时怎么办呢?

inspectdb

# 扫描默认数据库
python manage.py inspectdb
# 扫描某个表
python manage.py inspectdb [table_name]
# 扫描并保存结果到某个app
python manage.py startapp app1
python manage.py inspectdb > app1/models.py
# 扫描某个非 default 数据库(注意非数据库名,是在settings中的数据库配置字典的key)
python manage.py inspectdb --database=db1

inspectdb 读取在settings中配置的数据库连接,分析数据库中的所有表生成models结构。分析中有几个原则:

  • 无法分析的字段,默认为TextField
  • python保留字字段,例如 for, pass ,django创建的字段属性自动加上_filed(for_field,pass_field),并自动设置 db_column=for
  • 对于mysql,postgresql,sqlite, django 检测每个表的主键,如果没有会自动添加 id(primary_key=True)。其他数据库需要自己修改
  • 每个表都将生成一个model类。对于一些ManyToManyField,需要手动修改
  • django 不会读取和设置数据库 default默认值,需要手动修改
  • 非主键自增字段,django不能自动识别,需要自己添加(AutoField=True)
  • inspectdb 扫描的model类,如果修改结构不会自动同步更新到数据库。需要修改或删除 managed = False

文档参考

官方文档 v1.11 -- django-admin and manage.py
中文文档 v1..8.2 -- django-admin和manage.py
文章参考 -- Django集成已有的数据库和应用

原文地址:https://www.cnblogs.com/dapianzi/p/8391479.html