Django 3.0入门与实践
上QQ阅读APP看书,第一时间看更新

4.10 inspectdb

作用:查询数据库表或者视图对应的Django模型。如果没有提供参数,则仅在使用--includeviews选项时为视图创建模型。

通过该命令可以很方便地将已有的数据库表或者视图转换成Django模型。

语法:django-admin inspectdb [table [table ...]]

示例1:查看polls_question表对应的Django模型,输入命令,如下图所示。

示例2:查看数据库视图对应的Django模型。

首先在数据库中创建一个视图,该视图能显示调查问卷及问卷答案,视图对应的SQL脚本如下:

    select q.question_text, q.pub_date, c.choice_text, c.votes
    from polls_question as q inner join polls_choice as c on q.id = c.question_id

新视图在数据库中的显示如下图所示。

执行inspectdb命令,如下图所示。

注意

当inspectdb命令无法将数据库中的字段类型转换为Django模型字段类型时将会使用TextField,同时插入一条注释:'This field type is a guess.'。

如果数据库字段名是Python保留字,如class、pass,那么inspectdb命令会为模型属性名自动添加一个“_field”后缀。

inspectdb命令不会根据数据库字段默认值生成model字段的默认值。

默认情况下inspectdb命令生成的模型是非Django托管模型(managed=False),如果想生成托管模型,可以使用managed参数。

针对不同数据库需要注意以下几点:

在Oracle中使用--include-views可以为物化视图(materialized view)生成模型。

在PostgreSQL中,inspectdb命令可以为外部表(foreign table)生成模型,使用--include-views可以为物化视图(materialized view)生成模型,使用--include-partitions可以为部分表(partition table)生成模型。