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

TM.*_*TM. 83 database oracle django orm

我一直在家里乱搞Django和Django ORM,我必须说,我觉得它在易用性方面是最好的之一.

但是,我想知道是否可以在"反向"中使用它.

基本上我想要做的是从现有的数据库模式生成Django模型(来自不使用django并且相当陈旧的项目).

这可能吗?

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

ars*_*ars 97

是的,使用inspectdb命令:

inspectdb

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

如果您有一个遗留数据库,您可以使用它来使用Django.该脚本将检查数据库并为其中的每个表创建一个模型.

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

[...]

  • Django 拥有几乎所有你能想到的特性。即使经过多年的使用,它仍然让我感到惊讶。 (5认同)
  • 它也适用于Oracle - 我已经以这种方式使用它. (4认同)

KKl*_*ala 31

(Django 1.7.1)简单地运行python manage.py inspectdb将为数据库中的所有表创建类并在控制台上显示.

 $ python manage.py inspectdb
Run Code Online (Sandbox Code Playgroud)

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

 $ python manage.py inspectdb > models.py
Run Code Online (Sandbox Code Playgroud)

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


not*_*der 8

I have made a reusable app based on django's inspectdb command utility, Django Inspectdb Refactor.

This breaks models into different files inside models folder from a existing database. This helps managing models when they become large in number.

You can install it via pip:

pip install django-inspectdb-refactor
Run Code Online (Sandbox Code Playgroud)

Then register the app in settings.py as inspectdb_refactor

After this you can use it from command line as :

python manage.py inspectdb_refactor --database=your_dbname_defined_in_settings --app=your_app_label
Run Code Online (Sandbox Code Playgroud)

This will successfully create models folder with all the tables as different model files inside your app. For example:

典型结构

More details can be found here.