zoukankan      html  css  js  c++  java
  • [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集成已有的数据库和应用

  • 相关阅读:
    MFC
    AC自动机
    KMP
    Power Transmission (Hard Edition)
    Floyd
    地杰斯特算法
    二叉树
    51nod 1002 数塔取数问题【dp】
    51nod1049 最大子段和【动态规划】
    poj2385
  • 原文地址:https://www.cnblogs.com/dapianzi/p/8391479.html
Copyright © 2011-2022 走看看