【问题标题】:Is it possible to generate django models from the database?是否可以从数据库生成 django 模型?
【发布时间】:2010-11-13 20:21:40
【问题描述】:

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

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

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

这可能吗?

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

【问题讨论】:

    标签: database django oracle orm


    【解决方案1】:

    是的,使用inspectdb 命令:

    检查数据库

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

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

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

    [...]

    【讨论】:

    • 阅读该信息,它说它支持 mysql、sqlite 和 postgresql。可悲的是,我尝试使用的数据库是 Oracle :(
    • oof,我不相信 Django 目前对 Oracle 有很好的支持,无论是向前还是向后:/
    • Django 具有几乎所有人们能想到的功能。即使经过多年的使用,它仍然让我感到惊讶。
    • 我不确定,但是...也许您应该指出该链接指的是dev 版本(更强调??也许不是..)
    • 插入新表时是否可以使用相同的命令
    【解决方案2】:

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

     $ python manage.py inspectdb
    

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

     $ python manage.py inspectdb > models.py
    

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

    【讨论】:

      【解决方案3】:

      我基于 django 的 inspectdb 命令实用程序制作了一个可重用的应用程序, Django Inspectdb Refactor.

      这会将模型从现有数据库中拆分为模型文件夹内的不同文件。 这有助于在模型数量变多时管理模型。

      你可以通过 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
      

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

      更多详情可以查看here.

      【讨论】:

      • 在此处添加更多描述
      • python3 manage.py inspectdb_refactor --database=xmldb --app=django_sb_admin 错误:未知命令:'inspectdb_refactor' 键入'manage.py help'以了解用法。
      • 您是否在 settings.py 中将此应用注册为 inspectdb_refactor
      • 我收到此错误get_meta() missing 1 required positional argument: 'is_partition'。使用 django 2.0
      猜你喜欢
      • 2012-07-01
      • 2010-09-15
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多