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
TextField
和 StringField
不是你会遇到问题的地方,因为几乎所有数据库都支持它,但是考虑这个库 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
值
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
TextField
和 StringField
不是你会遇到问题的地方,因为几乎所有数据库都支持它,但是考虑这个库 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
值