是否可以从数据库生成Django模型?


90

我在家里一直在使用Django和Django ORM,我不得不说,就易用性而言,它是目前最好的之一。

但是,我想知道是否可以在“反向”中使用它。

基本上,我想做的是从现有的数据库模式(从不使用django且相当老的项目中)生成Django模型。

这可能吗?

更新:有问题的数据库是Oracle

Answers:


105

是的,使用inspectdb命令:

检查数据库

内省DATABASE_NAME设置指向的数据库中的数据库表,并将Django模型模块(models.py文件)输出到标准输出。

如果您有要使用Django的旧数据库,请使用此选项。该脚本将检查数据库并为其中的每个表创建一个模型。

如您所料,创建的模型将为表中的每个字段都具有一个属性。请注意,inspectdb在其字段名输出中有一些特殊情况:

[...]


1
阅读该信息后,它说它支持mysql,sqlite和postgresql。可悲的是,我想使用的数据库是Oracle :(
。TM

糟糕的是,我不认为Django目前对Oracle都有很好的支持,无论向前还是向后:/
AlbertoPL

3
Django具有人们可能想到的几乎所有功能。即使使用了多年,它仍然让我感到惊讶。
Divick '16

我不确定,但是...也许您应该指出,该链接指向的是该dev版本(更多强调?也许不是。)
Federico Gallo '18

插入新表时是否可以使用相同的命令
selvakumar

33

(Django 1.7.1)只需运行即可python manage.py inspectdb为数据库中的所有表创建类,并显示在控制台上。

 $ python manage.py inspectdb

使用标准的Unix输出重定向将其另存为文件:

 $ python manage.py inspectdb > models.py

(这对我适用于mysql和django 1.9)


10

我已经基于Django的inspectdb命令实用程序Django Inspectdb Refactor制作了可重用的应用程序 。

这会将模型分为现有数据库的models文件夹内的不同文件。当模型数量庞大时,这有助于管理模型。

您可以通过pip安装它:

pip install django-inspectdb-refactor

然后在settings.py中将应用注册为 inspectdb_refactor

之后,您可以在命令行中以如下方式使用它:

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label

这将成功地将所有表创建为模型文件夹,并将其作为应用程序内的不同模型文件。例如:

典型结构

可以在此处找到更多详细信息


在此处添加更多说明
Mathews Sunny Sunny

python3 manage.py inspectdb_refactor --database = xmldb --app = django_sb_admin错误:未知命令:'inspectdb_refactor'键入'manage.py help'以供使用。
阿里·雷扎

您是否在settings.py中将此应用程序注册为inspectdb_refactor
not2acoder

我得到这个错误get_meta() missing 1 required positional argument: 'is_partition'。使用django 2.0
LTroya
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.