【问题标题】:Django model creation from existing MongoDB databases从现有 MongoDB 数据库创建 Django 模型
【发布时间】:2015-03-02 16:59:27
【问题描述】:

我在 MongoDB 中有一些数据库,我想动态创建模型,因为有很多数据库,我无法手动创建。问题:

  1. models.py 应该是什么样的? (inspectdb 是否适用于 mongodb 数据库或仅适用于基于 SQL 的数据库?)
  2. 由于数据库模型是动态创建的,如何编写序列化程序类以返回动态字段?

提前致谢。

【问题讨论】:

    标签: python django mongodb django-rest-framework


    【解决方案1】:

    Django 支持对象-关系映射器,它针对的是传统的关系数据库。虽然there are a number of mongodb packages for Django,但它们都不支持inspectdb 来构建您的模型。无论哪种方式,inspectdb is a kludge 被设计为一个过程之一,以帮助从遗留系统迁移出来,即您将构建您的 models.py 文件 once 并且永远不会再次运行 inspectdb .这不是您想要做的,因为您似乎想要可以在运行时添加或更改的动态模型。

    从好的方面来说,Django MongoDB Enginearbitrary embedded models within pre-defined models一些支持。但即便如此,他们似乎也不太支持它:

    如您所见,通用嵌入式模型会增加大量开销,导致数据记录膨胀。如果您仍然想使用它们,请按照以下方式操作...

    总之,尽量构建模型以实际满足您的要求。如果您在生产之前对模型一无所知,那么 Django 可能不是适合您的解决方案。

    【讨论】:

    • 由于没有简单的内省来模仿inspectdb,而没有解决原始查询来获取列,我目前正在抓狂。我认为 nonrel 的强大之处在于不必事先严格定义模型。我不明白为什么在 Collection 之上没有一个简单的界面可以允许类似的东西: from magicmongo.collections import imodels # where imodels 是至少显示索引的字典
    • 是的。这就是诺雷尔的“力量”。 Django 的强大之处在于,您可以轻松地定义一个固定且严格的模式,其中包含所有逻辑、视图和管理工具。 inspectdb 是一团糟。
    • 我正在考虑的解决方法(实际上也解决了迁移问题)是使用 Stripe 的 github.com/stripe/mosql 并稍微握一下手。
    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2017-06-01
    • 1970-01-01
    • 2020-09-11
    • 2013-01-23
    相关资源
    最近更新 更多