Python3操作MongoDB数据库

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Python3操作MongoDB数据库

Python3操作MongoDB数据库


x7tqydsimybf4_4cd1f525c99b4f8aaffd9ae665358c43.jpeg


0. 写在前面

  • Linux: Ubuntu Kylin 16.04 
  • MongoDB: MongoDB3.2.7 
  • Python: Anaconda With Python3.7 


1. 安装开源驱动库pymongo


pymongo驱动程序可以直接连接MongoDB数据库


zhangsan@node01:~$ conda create -n py39 python =3.9
zhangsan@node01:~$ conda activate py39
(py39) zhangsan@node01:~$ python3-m pip install pymongo
Collecting pymongo
  Downloading pymongo-4.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (479 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 479.2/479.2 kB 37.7 kB/s eta 0:00:00
Installing collected packages: pymongo
Successfully installed pymongo-4.2.0


(py39) zhangsan@node01:~$ vim pyinsert.py


frompymongoimportMongoClientfromrandomimportrandintimportdatetimeclient=MongoClient('localhost',27017)
db=client.taobaoorder=db.order_infostatus= ['A','B','C']
cust_id= ['A123','B123','C123']
price= [500,200,250,300]
sku= ['mmm','nnn']
foriinrange(1,100):
items= []
item_count=randint(2,6)
forninrange(item_count):
items.append({"sku":sku[randint(0,1)],"qty":randint(1,10),"price":randint(0,5)})
new= { "status":status[randint(0,2)], "cust_id":cust_id[randint(0,2)], "price":price[randint(0,3)], "ord_date":datetime.datetime.utcnow(), "items":items }
print(new)
order.insert_one(new)
print(order.estimated_document_count())


  • 启动MongoDB
(py39) zhangsan@node01:/usr/local/mongodb-3.2.7$ mongod--config /mongodb/single/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 3493child process started successfully, parent exiting


  • 查看服务
(py39) zhangsan@node01:/usr/local/mongodb-3.2.7$ ps-ef | grep mongo
zhangsan       34931300:56 ?        00:00:01 mongod --config /mongodb/single/mongod.conf
zhangsan       35113214000:57 pts/0    00:00:00 grep--color=auto mongo


  • 执行py程序
(py39) zhangsan@node01:~$ python3 pyinsert.py
pymongo.errors.ConfigurationError: Server at localhost:27017 reports wire version 4, but this version of PyMongo requires at least 6 (MongoDB 3.6).


很明显,此处需要 降低驱动pymongo的版本 


  • 卸载pymongo
(py39) zhangsan@node01:~$ pip uninstall -y pymongo
Found existing installation: pymongo 4.2.0
Uninstalling pymongo-4.2.0:
  Successfully uninstalled pymongo-4.2.0
(py39) zhangsan@node01:~$ pip3 list
Package      Version
------------------------certifi      2022.6.15
pip          22.1.2
setuptools   63.4.1


  • 安装pymongo3.6版本
(py39) zhangsan@node01:~$ pip3 install pymongo==3.6
Collecting pymongo==3.6
  Downloading pymongo-3.6.0.tar.gz (583 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 583.3/583.3 kB 52.1 kB/s eta 0:00:00
  Preparing metadata (setup.py) ... doneBuilding wheels for collected packages: pymongo
  Building wheel for pymongo (setup.py) ... done  Created wheel for pymongo: filename=pymongo-3.6.0-cp39-cp39-linux_x86_64.whl size=272327sha256=72a9dacdef7afa26cb169debe429964d1b5ab119ee39e7ec4c3eb5c59c5433c0
  Stored in directory: /home/zhangsan/.cache/pip/wheels/6c/97/2e/74c0fd06fe0df24ded743a8af0707d1b5d618a0e8d321ba85c
Successfully built pymongo
Installing collected packages: pymongo
Successfully installed pymongo-3.6.0
(py39) zhangsan@node01:~$ pip3 list | grep pymongo
pymongo      3.6.0



- 继续报错: AttributeError: module 'platform' has no attribute 'linux_distribution' 

(py39) zhangsan@node01:~$ python3 pyinsert.py 
Traceback (most recent call last):
  File "/home/zhangsan/pyinsert.py", line 1, in <module>
    from pymongo import MongoClient 
  File "/usr/local/anaconda/envs/py39/lib/python3.9/site-packages/pymongo/__init__.py", line 87, in <module>
    from pymongo.mongo_client import MongoClient
  File "/usr/local/anaconda/envs/py39/lib/python3.9/site-packages/pymongo/mongo_client.py", line 52, in <module>
    from pymongo.client_options import ClientOptions
  File "/usr/local/anaconda/envs/py39/lib/python3.9/site-packages/pymongo/client_options.py", line 23, in <module>
    from pymongo.pool import PoolOptions
  File "/usr/local/anaconda/envs/py39/lib/python3.9/site-packages/pymongo/pool.py", line 124, in <module>
    platform.linux_distribution() if part])),
AttributeError: module 'platform' has no attribute 'linux_distribution'



关于这个error,其实是Python自身的原因


Python从3.8版本开始,已经从平台模块中删除了“linux_distribution()”函数


前文使用的是Python3.9,解决这个问题有两种方法:

  • 修改Python3.9源码
  • 降低Python版本到3.7


  • 新建一个Python3.7虚拟环境
zhangsan@node01:~$ conda create -n pymongo python =3.7
zhangsan@node01:~$ conda activate pymongo
(pymongo) zhangsan@node01:~$ python3-m pip install pymongo=3.6
Collecting pymongo
  Downloading pymongo-3.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (479 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 479.2/479.2 kB 37.7 kB/s eta 0:00:00
Installing collected packages: pymongo
Successfully installed pymongo-3.6.0


  • 再次执行py程序,运行成功
(pymongo) zhangsan@node01:~$ python3 pyinsert.py


上述代码中使用了 estimated_document_count() 函数,该函数是MongoDB4.0.3的新功能,此处会出现错误,改为count()函数即可


2. 参考

https://stackoverflow.com/questions/63636697/error-module-platform-has-no-attribute-linux-distribution
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
17天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
55 15
|
2月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
136 68
|
28天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
189 15
|
25天前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
3月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
3月前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
3月前
|
存储 NoSQL MongoDB
MongoDB 数据库引用
10月更文挑战第20天
27 1
|
3月前
|
存储 NoSQL MongoDB
基于阿里云数据库MongoDB版,微财数科“又快又稳”服务超7000万客户
选择MongoDB主要基于其灵活的数据模型、高性能、高可用性、可扩展性、安全性和强大的分析能力。
|
3月前
|
存储 NoSQL MongoDB
mongodb的数据库表怎么创建
在此过程中,理解并掌握这些基本操作,是深入探索MongoDB魅力,乃至构建高效数据解决方案的关键所在。通过实践,您将更加深刻地体会到这种随需应变的数据管理模式带来的便利与效率提升。
59 0