2015-03-02 68 views
2

我有一些数据库在MongoDB中,我想创建动态模型,因为有很多数据库,我不能手动完成。问题:从现有的MongoDB数据库创建Django模型

  1. 我的models.py应该是什么样子? (是否inspectdb与mongodb数据库或仅基于SQL的dbs一起工作?)
  2. 由于数据库模型是动态创建的,因此如何编码序列化程序类以返回动态字段?

在此先感谢。

回答

2

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

好的一面,Django MongoDB Engine一些支持arbitrary embedded models within pre-defined models。但即使如此,他们似乎也不太支持它:

正如您所看到的,通用嵌入式模型会增加大量的数据记录的开销。如果您想要使用它们,请按照以下步骤操作:

总之,尽可能最好地构建您的模型,以实际符合您的要求。如果您在生产之前对模型一无所知,那么Django可能不适合您。

+0

由于没有简单的自省来模仿inspectdb而不解决原始查询以获取列,我目前正在撕裂我的头发。我认为诺雷尔的力量不必事先严格定义模型。我不明白为什么没有一个简单的接口在集合之上,可以允许这样的东西: from magicmongo.collections import imodels #其中imodels是一个至少包含索引的字典 – 2015-09-03 16:08:26

+0

是的。这是norel的“权力”。 Django的强大功能可以让您轻松定义一个固定且严格的模式,并在其中包含所有的逻辑,视图和管理工具。 'inspectdb'是一个混乱。 – 2015-09-03 20:18:53

+0

我正在考虑的解决方法(实际上也解决了迁移问题)正在使用Stripe的https://github.com/stripe/mosql进行一些手工操作。 – 2015-09-07 09:25:48

相关问题