gpt4 book ai didi

python - 任何 Python ORM 都充分利用了 NoSQL 的无模式功能吗?

转载 作者:行者123 更新时间:2023-11-30 23:46:58 24 4
gpt4 key购买 nike

我尝试了 Django-nonrel(这是 Django 项目的 NoSQL 分支)和 MongoDB。在它的ORM中,类只能继承自抽象类,因此即使两个类继承自同一个基类,它们也会保存到MongoDB中的不同集合中。

此设计向无模式数据库添加了预定义模式,现在每个集合都有其独特的模式。

我想要的是,如果 ClassA 和 ClassB 继承自 BaseClass,则 ClassA 和 ClassB 的每个实例都应该放在同一个集合中(或者在除 MongoDB 之外的 NoSQL 中类似的集合)

最佳答案

Django-nonrel 的目标是保持与 Django 的 ORM 相同的行为,但允许使用非关系存储后端。由于 Django 不允许将多个不同的模型存储在同一个(关系)表中,因此当我得知 Django-nonrel 也不允许时,我并不感到惊讶。

如果您想要所描述的行为,您可以查看 Mongoengine ,一种 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()

由于 TextBlogPostImageBlogPost 都继承自 BlogPost,因此它们都将保存在同一个集合中(默认情况下,名为“blog_post”) )。

关于python - 任何 Python ORM 都充分利用了 NoSQL 的无模式功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8552262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com