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)生成模型。