python常用库之pymongo库(Python操作Mongodb数据库)| Django项目连接MongoDB方式选型(MongoEngine)

这篇具有很好参考价值的文章主要介绍了python常用库之pymongo库(Python操作Mongodb数据库)| Django项目连接MongoDB方式选型(MongoEngine)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python库-pymongo库 | Python操作Mongodb数据库

1. pymongo包

github:https://github.com/mongodb/mongo-python-driver

PyMongo用于与Python与MongoDB数据库进行交互的工具。bson包是Python的BSON格式 的实现。Pymongo包是MongoDB的本地Python驱动程序。gridfs包是gridfs 的pymongo实现。

Pymongo支持MongoDB 3.6、4.0、4.2、4.4、5.0和6.0。

总结:PyMongo 是 MongoDB 与 Django 交互的标准驱动程序。这是在 Python 中使用 MongoDB 的官方和首选方式。

2. 安装pymongo包

进入到virtualenv环境下,
执行命令

python -m pip install pymongo

3. 官方示例

官方示例:https://github.com/mongodb/mongo-python-driver

import pymongo
client = pymongo.MongoClient(“localhost”, 27017)
db = client.test
db.name
‘test’
db.my_collection
Collection(Database(MongoClient(‘localhost’, 27017), ‘test’), ‘my_collection’)
db.my_collection.insert_one({“x”: 10}).inserted_id
ObjectId(‘4aba15ebe23f6b53b0000000’)
db.my_collection.insert_one({“x”: 8}).inserted_id
ObjectId(‘4aba160ee23f6b543e000000’)
db.my_collection.insert_one({“x”: 11}).inserted_id
ObjectId(‘4aba160ee23f6b543e000002’)
db.my_collection.find_one()
{‘x’: 10, ‘_id’: ObjectId(‘4aba15ebe23f6b53b0000000’)}
for item in db.my_collection.find():
… print(item[“x”])

10
8
11
db.my_collection.create_index(“x”)
‘x_1’
for item in db.my_collection.find().sort(“x”, pymongo.ASCENDING):
… print(item[“x”])

8
10
11
[item[“x”] for item in db.my_collection.find().limit(2).skip(1)]
[8, 11]

使用连接池连接MongoDB

何时使用池化客户端:

  1. 进行大部分常规的数据库操作,如增删改查、简单聚合等。这可以充分利用连接池的优势。
  2. 当需要高性能且并发度较高的场景。连接池可以大大减少创建新连接的开销。
  3. 当需要管理和控制数据库连接,避免大量连接消耗系统资源时。

使用连接池连接MongoDB的好处:

  • 降低连接开销,提高性能和效率
  • 管理和控制连接数量,避免系统资源消耗过高
  • 简化连接管理,通过简单的获取连接操作就可以进行数据库访问。
  • 方便对连接进行统一的设置和维护,如超时时间、重试次数等。
from pymongo import MongoClient
from concurrent.futures import ThreadPoolExecutor
import socket
import time
import os

MONGO_HOST = os.environ.get('MONGO_HOST') 
MONGO_PORT = os.environ.get('MONGO_PORT')  
MONGO_USER = os.environ.get('MONGO_USER')
MONGO_PASSWORD = os.environ.get('MONGO_PASSWORD')  

class MongoDB:
    def __init__(self):
        self.mongo_url = f'mongodb://{MONGO_USER}:{MONGO_PASSWORD}@{MONGO_HOST}:{MONGO_PORT}'
        self.pool = ThreadPoolExecutor(max_workers=10)  
        self.client = MongoClient(self.mongo_url,connectTimeoutMS=5000)
        
    def get_client(self):
        return self.pool.submit(MongoClient, self.mongo_url, 
                                connectTimeoutMS=5000)

    def get_database(self, name):
        client = self.get_client()
        db = client[name]
        return db

        
    def insert_one(self, db_name, collection_name, doc):
        try:
            db = self.get_database(db_name)
            collection = db[collection_name]
            collection.insert_one(doc)
        except Exception as e:
            logger.error(f'Failed to insert document into {db_name}.{collection_name}: {e}')   
            
    def close(self):
        self.client.close()
        self.pool.shutdown()

pymongo版本不同,其API也会有差异

例如,在pymongo 2.x版本中,Database对象的集合列出方法是collection_names(),而在3.x中改为了list_collection_names()。

我在 pymongo-4.3.3 版本发现,没有了 collection_names()方法,而是list_collection_names()!

4. Django项目连接MongoDB方式选型

有三种方法连接Django到MongoDB数据库

1.PyMongo

PyMongo 是 MongoDB 与 Django 交互的标准驱动程序。这是在 Python 中使用 MongoDB 的官方和首选方式。 PyMongo 提供了执行所有数据库操作的功能,例如搜索、删除、更新和插入。由于 PyMongo 可与 PyPI 一起使用,您可以使用 pip 命令快速安装它。

2. Djongo

在Django的官方文档中,没有介绍mongodb数据库的任何使用方法,mongodb也不是django官方推荐使用的数据库。以下是django官方列出的内建数据库。官方地址:https://docs.djangoproject.com/en/4.1/ref/settings/ 查看 DATABASES¶

连接到其他数据库后端时,例如MariadB,MySQL,Oracle或PostgreSQL,将需要其他连接参数。有关如何指定其他数据库类型,请参见下面的引擎设置

如果您正在使用 SQL 这样的关系型数据库并希望迁移到 MongoDB,那么您可以使用 Djongo。在不更改 Django ORM 的情况下,Djongo 将所有 SQL 查询转换为 MongoDB 语法查询。

Djongo 是对 PyMongo 的改进,因为开发人员无需编写冗长的查询。它将 Python 对象映射到 MongoDB 文档,即对象文档映射 (ODM)。 Djongo 确保只有干净的数据才能进入数据库。通过使用 Djongo 执行完整性检查、应用验证等,无需修改现有的 Django ORM。

安装Djongo:

pip install djongo

django配置Djongo
打开 settings.py 文件,搜索 DATABASES,并将设置更改为指向 MongoDB。 ENGINE 将是 djongo,数据库名称 (NAME) 将是您的 MongoDB 数据库名称。

DATABASES = {
       'default': {
           'ENGINE': 'djongo',
           'NAME': 'db-name',
       }
   }

如果您的数据库不在本地主机上或受到保护,您还应该填写 CLIENT 信息,如 HOST、USERNAME、PASSWORD 等。

DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            'NAME': 'your-db-name',
            'ENFORCE_SCHEMA': False,
            'CLIENT': {
                'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority'
            }  
        }
}

3. MongoEngine

官网:http://mongoengine.org/
MongoEngine 使用教程(一)
参考URL: https://blog.csdn.net/qq_38165374/article/details/104719452

MongoEngine是MongoDB的一个ODM(Object-Document Mapper)框架,它提供了类似Django的语法来操作MongoDB数据库。

5. 哪种方法连接到 Django MongoDB 更好呢?

如果您要在应用程序中编写大量复杂的查询,则应该使用 PyMongo。 如果您有一个 Django 项目需要从另一个数据库迁移到 MongoDB,那么 Djongo 更合适,因为这需要最少的代码更改。

6. pymongo 连接池 以及封装一个单例实战

使用PyMongo的连接池并封装一个单例模式是很好的实践:

  1. 重用数据库连接,提高性能和效率。使用连接池可以重用连接,减少重复创建和关闭连接的开销。
  2. 协调资源,避免过多连接。通过设置最大连接数,可以控制连接数量,避免因连接过多导致的资源问题。

使用Django信号关闭连接池
在Django应用退出时,可以使用信号来关闭数据库连接池,释放资源文章来源地址https://www.toymoban.com/news/detail-695728.html

到了这里,关于python常用库之pymongo库(Python操作Mongodb数据库)| Django项目连接MongoDB方式选型(MongoEngine)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 操作 MongoDB 数据库介绍

    MongoDB 是一款面向文档型的  NoSQL  数据库,是一个基于分布式文件存储的开源的非关系型数据库系统,其内容是以  K/V  形式存储,结构不固定,它的字段值可以包含其他文档、数组和文档数组等。其采用的  BSON (二进制 JSON )的数据结构,可以提高存储和扫描效率,但空

    2024年02月10日
    浏览(27)
  • Python常用OS库之path模块学习

    学习python没有太多捷径,有也只有技巧,更重要的是要多学多练,个人觉得练更重要,读万卷书不如行万里路。编程是一门技能,所以除了看还要多实践,写得多了自然也就有了路。 如果看全部的标准库文档,可以访问这个链接 os --- 多种操作系统接口 — Python 3.12.3 文档 接

    2024年04月14日
    浏览(33)
  • MongoDB常用的操作(服务器、数据库、集合)

    前面两篇已经介绍了MongoDB系统架构及其BSON数据类型。本文将讲解基本的MongoDB操作。 一、MongoDB启动命令 启动MongoDB 查看是否启动成功 重启MongoDB 关闭MongoDB 二、使用init命令操作MongoDB 启动MongoDB 查看是否启动成功 重启MongoDB 关闭MongoDB 三、启动mongodb客户端 查看该服务是否启动

    2024年02月07日
    浏览(45)
  • pymongo通过oplog获取数据(mongodb)

    使用 MongoDB 的 oplog(操作日志)进行数据同步是高级的用法,主要用于复制和故障恢复。需要确保源 MongoDB 实例是副本集的一部分,因为只有副本集才会维护 oplog。 以下是简化的步骤,描述如何使用 oplog 进行数据同步: 设置 MongoDB 副本集 如果还没有设置 MongoDB 为副本集,你

    2024年02月11日
    浏览(25)
  • python数据库——Mongodb

    MongoDB 是一个开源的 NoSQL数据库系统,它是一个面向文档的数据库,使用 JSON 格式来存储和查询数据。MongoDB 是一个非关系型数据库,它的设计目标是以高性能、高可用性和可扩展性为特点,适用于处理大量的非结构化数据。 特点: MongoDB 是一个面向文档存储的数据库,操作

    2024年02月07日
    浏览(32)
  • Python使用MongoDB数据库

    MongoDB是一种流行的NoSQL数据库,可以用于存储和管理大量的非结构化或半结构化数据。Python是一种流行的编程语言,也可以使用MongoDB来存储和管理数据。在本文中,我们将介绍如何使用Python访问MongoDB数据库。 安装MongoDB和Python驱动程序 首先,您需要安装MongoDB数据库和Python的

    2024年02月10日
    浏览(34)
  • 〖Python 数据库开发实战 - MongoDB篇⑧〗- MongoDB的数据结构

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2023年04月09日
    浏览(47)
  • NoSql数据库及使用Python连接MongoDB

    NoSQL 数据库是非关系数据库,不使用结构化查询语言 (SQL) 进行数据操作。相反,他们使用其他数据模型进行访问和数据存储。SQL 数据库通常用于处理结构化数据,但它们可能不是处理非结构化或半结构化数据的最佳选择。 NoSQL 数据库提供了快速高效地存储和检索大量数据的

    2024年02月09日
    浏览(89)
  • Python第三方模块:pymongo模块的用法

    pymongo模块是python操作mongo数据的第三方模块,记录一下常用到的简单用法。 首先需要连接数据库: MongoClient():该方法第一个参数是数据库所在地址,第二个参数是数据库所在的端口号 authenticate():该方法第一个参数是数据库的账号,第二个参数是数据库的密码 第一行代码表

    2024年02月09日
    浏览(47)
  • 【小沐学数据库】MongoDB下载、安装和入门(Python)

    MongoDB是一个文档数据库,旨在简化应用程序 开发和扩展。 官网地址: https://www.mongodb.com/ MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关

    2024年02月03日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包