![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=1739043112-3Ufss5ygbQ1IZJ5r8UJPDp7rNZNlCtV1-0-6d89189dde4c9dd701323393d5ac6820)
示例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=1739043112-3tGDhQGcGtCGqd8Vt32gz7p5gzfq2cSU-0-cbc1549efda3022defc39e0dc6e49add)
执行inspectdb命令,如下图所示。
![](https://epubservercos.yuewen.com/B89DD0/19549641008916106/epubprivate/OEBPS/Images/Figure-P49_24210.jpg?sign=1739043112-H9psPqlZx0hJ6m8z5CFjQjRw6Acx7DNp-0-692cfe4e1a45ccc56810b1784d7e05db)
注意
当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)生成模型。