![Django 3.0入门与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/246/36862246/b_36862246.jpg)
4.10 inspectdb
作用:查询数据库表或者视图对应的Django模型。如果没有提供参数,则仅在使用--includeviews选项时为视图创建模型。
通过该命令可以很方便地将已有的数据库表或者视图转换成Django模型。
语法:django-admin inspectdb [table [table ...]]
示例1:查看polls_question表对应的Django模型,输入命令,如下图所示。
![](https://epubservercos.yuewen.com/B89DD0/19549641008916106/epubprivate/OEBPS/Images/Figure-P48_23777.jpg?sign=1739443115-rU7TBSvkHWgdMVIm7Di1iiaR9EbQqqLp-0-ffe1c5f50146f203db53d6c8dd9e13ca)
示例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
新视图在数据库中的显示如下图所示。
![](https://epubservercos.yuewen.com/B89DD0/19549641008916106/epubprivate/OEBPS/Images/Figure-P49_24203.jpg?sign=1739443115-JxnjQZHQhnZyc1ONRGZH3LvLBYqPLjby-0-743a7ace821e2e9b9a236c5d397c8119)
执行inspectdb命令,如下图所示。
![](https://epubservercos.yuewen.com/B89DD0/19549641008916106/epubprivate/OEBPS/Images/Figure-P49_24210.jpg?sign=1739443115-j09zE2DKrYrk2OA0UmbjBVBQKpnBY8Ru-0-7ddb5044440f5cb10f7083e89b3ef246)
注意
当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)生成模型。