使用PyMongo作为Django后端

时间:2017-08-30 09:43:31

标签: django mongodb pymongo tastypie

我正在用django编写应用程序,我想使用mongoDB作为我的数据库。我搜索了很多,发现mongoengine和Pymongo是可能的选择。我决定暂时使用PyMongo。但问题是我无法将我的应用程序连接到mongoDB。到目前为止,我尝试过跟进:

from pymongo import MongoClient
client = MongoClient()
db = client['user_central']

但它不能正常工作。必须在DATABASES django变量中添加一些东西,这就是我被追赶的地方。如何将我的django应用程序连接到mongoDB并使用mongo作为我的Django后端?

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:1)

Pymongo不是ORM,是一个驱动程序,包含函数工具,可与MongoDB一起使用。

Mongoengine它是一个“文档 - 对象映射器(想想ORM,但对于文档数据库)”基于pymongo。这是一个更好的选择,因为你将使用'ORM',类似于Django关系ORM。

在我看来,django-mongoengine是使用Django + MongoDB的一个很好的选择,是一个可以整合,很难有一些问题,不稳定:“这是不稳定的项目,如果你想要的话使用它 - 修复你需要的东西“,但他们仍在努力。

配置django-mongoengine并不是真正的开箱即用,在他们的README.rst上没有完全描述,但它可以完成。他们有example here如何使用它。

注意:检查django settings.py,有描述Django正在使用虚拟(假数据库),后来他们定义 新设置MONGODB_DATABASES。祝你好运!

答案 1 :(得分:0)

Django ORM仅支持关系数据库,而MongoDB不是关系数据库。因此,理论上它不能被Django支持。

尽管如此,还存在自定义后端,例如mongodb-engine,它假装Django MongoDB是关系型的。在我看来,这是一个非常丑陋的黑客攻击,会在最糟糕的时刻爆发。如果要使用非关系数据库,请不要使用Django ORM。

如果您是初学者,请使用SQLite。

答案 2 :(得分:0)

如何将我的django应用程序连接到mongoDB并使用mongoDB作为我的Django后端:

首先安装djongo:

pip install djongo

然后运行迁移:

manage.py make migrations
manage.py migrate

最后添加到您的设置文件中:

DATABASES = {
   ‘default’: {
      ‘ENGINE’: ‘djongo’,
      ‘NAME’: ‘your-db-name’,
   }
}

就这么简单!

作为Web开发人员,您可以通过两种方式应对将Django连接到MongoDB的挑战:

使用与MongoDB兼容的模型框架:在django项目中使用第三方框架,如MongoEngineMing。但是会错过:

  • 该项目的1500多个核心贡献者,
  • Hourly fixes and ticket resolution
  • 减少现有Django模型的专业知识,并加强新模型框架。
  • 也许最大的缺点是你的项目不能使用任何Django的contrib模型!忘记为项目使用Admin,Sessions,Users,Auth等,contrib模块!

Django SQL到MongoDB转发器 - Djongo :策略是将Django ORM生成的Django SQL查询语法转换为pymongo命令。 Djongo是一个SQL to MongoDB查询编译器。它将每个SQL查询字符串转换为mongoDB查询文档。

如果你想使用Django Admin操作MongoDB,只需启动它:

manage.py runserver

转到:http://localhost:8000/admin/

操纵您的嵌入式模型,如此屏幕截图所示:

enter image description here

如果您正在寻找更多信息,请在Using Django with MongoDB上添加一行代码,只需添加一行代码即可。否则,您可以直接跳转到djongo documentation并开始使用它。

答案 3 :(得分:0)

作为一种不太方便(不是自动插入到 django 的功能)但有效的方式,您可以将 MongoDB 作为独立的本地部署在您的计算机或远程服务器上。

然后,使用要与之交互的 mongoDB 服务的 URL 启动 PyMongo 对象。

通过这种方式,您可以在 Django 功能之外使用 DB 调用,但直接从用户代码开始。

  • 如果使用 Linux,我更喜欢使用 mongoDB docker 容器。

    $ docker run --name mongodb -p 27017:27017 --net mynet mongo

然后使用:

from pymongo import MongoClient

url = 'mongodb://127.0.0.1:27017'
client = pymongo.MongoClient(url)
db = client['db_name']
  • 这就是我在没有框架(或其他框架,例如 Flask)的情况下使用 MongoDB 的方式

MongoDB Docker Official