【问题标题】:Using PyMongo as Django backend使用 PyMongo 作为 Django 后端
【发布时间】:2018-02-07 23:14:00
【问题描述】:

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 根本不要将DATABASES变量放在设置文件中,只要在项目中的任意文件中启动MongoDB连接就可以开始使用了。

标签: django mongodb pymongo tastypie


【解决方案1】:

作为一种不太方便(不自动插入 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']
  • 这就是我在没有框架的情况下使用 MongoDB 的方式(或其他,例如 Flask

MongoDB Docker Official

【讨论】:

    【解决方案2】:

    如何将我的 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 to MongoDB transpiler — Djongo:策略是将Django ORM生成的Django SQL查询语法翻译成pymongo命令。 Djongo 是一个 SQL 到 MongoDB 查询编译器。它将每个 SQL 查询字符串翻译成一个 mongoDB 查询文档。

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

    manage.py runserver

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

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

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

    【讨论】:

    • 我需要连接并只读一个预先存在的 mongodb 数据库。有没有一个例子可以说明我如何使用 djongo 来做到这一点,@nesdis?
    • 有一个tutorial 告诉你如何做到这一点,如果你有机会看看它
    • 好的,谢谢@nesdis。我正在关注教程,特别是零风险步骤,但已经有两个问题:在我的模型文件中,我添加了索引,但它们没有添加到新的空干净数据库中(任何集合的唯一索引是 id 和 primary_key) ;第二个问题是:如果我没有每个文档的主键,我该如何执行第 4 步“将所有数据从现有数据库复制到新数据库”?
    • 您将需要编写一个小脚本,该脚本将从一个数据库读取并插入另一个数据库。你可以用pymongo写脚本
    【解决方案3】:

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

    Mongoengine 它是一个基于 pymongo 的“Document-Object Mapper(想想 ORM,但用于文档数据库)”。这是一个更好的选择,因为您将使用类似于 Django 关系 ORM 的“ORM”。

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

    配置 django-mongoengine 并不是直接开箱即用的,在他们的 README.rst 中没有完全描述,但可以做到。他们有一个关于如何使用它的example here

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

    【讨论】:

      【解决方案4】:

      Django ORM 只支持关系型数据库,MongoDB 不是关系型数据库。所以理论上Django是不支持的。

      尽管如此,仍然存在诸如 mongodb-engine 之类的自定义后端,它们向 Django 假装 MongoDB 是关系型的。在我看来,这是一个非常丑陋的 hack,会在最糟糕的时刻爆炸。如果要使用非关系型数据库,请不要使用 Django ORM。

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

      【讨论】:

      • 我明白了,但由于某种原因,我必须使用 pymongo。如何将它用作 django 后端(即使这意味着我不使用 django ORM)?我的意思是如何将我的 django 应用程序连接到 mongodb?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 2016-08-06
      • 2016-11-27
      • 2014-12-18
      相关资源
      最近更新 更多