任何Python ORM都可以充分利用NoSQL';s的无模式功能?
我用任何Python ORM都可以充分利用NoSQL';s的无模式功能?,python,mongodb,orm,nosql,Python,Mongodb,Orm,Nosql,我用MongoDB尝试了Django nonrel(这是Django项目的一个NoSQL分支)。在它的ORM中,类只能从抽象类继承,所以即使两个类从同一个基类继承,它们也会保存到MongoDB中的不同集合中 此设计向无模式数据库添加了预定义的模式,每个集合现在都有其唯一的模式 我想要的是,如果ClassA和ClassB是从基类继承的,那么ClassA和ClassB的每个实例都应该放在同一个集合中(或者放在NoSQL中类似的东西,而不是MongoDB)Django Norel的目标是维护与Djan
MongoDB
尝试了Django nonrel
(这是Django项目的一个NoSQL分支)。在它的ORM中,类只能从抽象类继承,所以即使两个类从同一个基类继承,它们也会保存到MongoDB中的不同集合中
此设计向无模式数据库添加了预定义的模式,每个集合现在都有其唯一的模式
我想要的是,如果ClassA和ClassB是从基类继承的,那么ClassA和ClassB的每个实例都应该放在同一个集合中(或者放在NoSQL中类似的东西,而不是MongoDB)Django Norel的目标是维护与Django的ORM相同的行为,但允许使用非关系存储后端。由于Django不允许在同一个(关系)表中存储多个不同的模型,因此我毫不奇怪地了解到Django Nonl也不允许 如果您想了解所描述的行为,可以查看MongoDB的ODM(对象文档映射器),它受到Django ORM的启发,并与Django ORM有类似的感觉,但它允许更灵活的模式和行为,如您所描述的模式和行为 特别是,在使用Mongoengine时,您可以创建多个类,这些类的记录存储在同一个集合中,如:
class BlogPost(mongoengine.Document):
create_date = mongoengine.DateTimeField()
mod_date = mongoengine.DateTimeField()
title = mongoengine.StringField()
meta = {
'abstract': True,
}
def save(self):
if not self.pk:
self.create_date = datetime.utcnow()
self.mod_date = datetime.utcnow()
super(BlogPost, self).save()
class TextBlogPost(BlogPost):
body = mongoengine.StringField()
class ImageBlogPost(BlogPost):
image = mongoengine.FileField()
caption = mongoengine.StringField()
由于
TextBlogPost
和ImageBlogPost
都继承自BlogPost
,它们都将保存在同一个集合中(默认情况下,命名为“blog\u post”)。对于一个没有任何关系的文档数据库来说,ORM有什么意义?为什么这么抽象?如果直接使用db驱动程序,我想会更容易。