MongoDB 和 Django 之间的依赖隔离是如何工作的?

How does dependencies isolation between MongoDB and Django work?

mongdb 和 django 之间的隔离依赖关系是如何工作的?

我和JAVA/SPRING做了几个项目,最近几天, 我正在研究 Python django .

我成功连接了django和sqlite,几天前, 当我尝试连接到 mongodb 时,由于 django-admin,很难分离依赖数据库和 django。

Django-admin 需要为每个模型获取特定的字段,但是,每个数据库都有自己的字段属性。因此,当项目要更改数据库结构时,我们应该更改model.py中的大量代码。

例如

如果 sqlite 到 Mongodb 会怎样?仅使用不同的驱动程序不能使服务器工作。例如 models.TextField(sqlite) -> models.StringField(mongodb)。这是不可避免的,对吧?在数据库和 django

之间完全隔离依赖关系似乎很困难

可以吗?我错过了什么吗?

What if sqlite to Mongodb? only using different driver cannot make server work. e.g models.TextField(sqlite) -> models.StringField(mongodb). It is unavoidable, right? It seems difficult that solating dependencies completely between database and django

TextFieldStringField 不是你会遇到问题的地方,因为几乎所有数据库都支持它,但是考虑这个库 django-mongodb-engine,它重用了已经存在的基本字段尽可能存在于 Django ORM 中,例如

class Post(models.Model):
    title = models.CharField() <-- both Django ORM and mongodb-engine have this
    text = models.TextField()  <-- both Django ORM and mongodb-engine have this

该模型在 SQL 和 MongoDB 引擎中都可以正常工作,但是如果您使用 MongoDB-only(不是默认的 Django ORM 引擎)功能,例如ListField()

class Post(models.Model):
    title = models.CharField()
    text = models.TextField()
    tags = ListField() # <-- not supported everywhere

然后迁移到 SQL 引擎将涉及一些手动工作来映射该字段。

Therefore, when project should change database structure, we should change a lot of code in models.py. Is it Okay?

通常是的,要更改您在 models.py 中进行更改的数据库结构。之后你将是 运行 一个 migration,这是一个生成脚本来改变数据库的步骤(例如添加一个新的 SQL table 列)。对于 MongoDB,没有明确的迁移,因为它的模式是灵活的(或者 schemaless,如果你愿意)。

至于admin,它在Django模型方面相当聪明,你可能需要定义你想要出现在admin中的模型和字段,但在detail view中你不必担心每个字段,因为 Django 管理员根据 models.py

中的信息理解它们

要更改数据库驱动程序,它是 settings.py

中的 DATABASES