Python3操作MongoDB数据库

文章目录

  • Python3操作MongoDB数据库
    • 0. 写在前面
    • 1. 安装开源驱动库pymongo
    • 2. 参考


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 pymongoDownloading 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
from pymongo import MongoClient
from random import randint
import datetime
client = MongoClient('localhost',27017)
db = client.taobao
order = db.order_info
status = ['A','B','C']
cust_id = ['A123','B123','C123']
price = [500,200,250,300]
sku = ['mmm','nnn']
for i in range(1,100):items = []item_count =randint(2,6)for n in range(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: 3493
child process started successfully, parent exiting
  • 查看服务
(py39) zhangsan@node01:/usr/local/mongodb-3.2.7$ ps -ef | grep mongo
zhangsan       3493     1  3 00:56 ?        00:00:01 mongod --config /mongodb/single/mongod.conf
zhangsan       3511  3214  0 00: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.6Downloading pymongo-3.6.0.tar.gz (583 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 583.3/583.3 kB 52.1 kB/s eta 0:00:00Preparing metadata (setup.py) ... done
Building wheels for collected packages: pymongoBuilding wheel for pymongo (setup.py) ... doneCreated wheel for pymongo: filename=pymongo-3.6.0-cp39-cp39-linux_x86_64.whl size=272327 sha256=72a9dacdef7afa26cb169debe429964d1b5ab119ee39e7ec4c3eb5c59c5433c0Stored 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 MongoClientFile "/usr/local/anaconda/envs/py39/lib/python3.9/site-packages/pymongo/mongo_client.py", line 52, in <module>from pymongo.client_options import ClientOptionsFile "/usr/local/anaconda/envs/py39/lib/python3.9/site-packages/pymongo/client_options.py", line 23, in <module>from pymongo.pool import PoolOptionsFile "/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 pymongoDownloading 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

Python3操作MongoDB数据库相关推荐

  1. Python3 操作MongoDB数据库

    以上一篇的数据为例子. In [1]: import pymongo #引入pymongo模块In [2]: client = pymongo.MongoClient(host = 'localhos ...

  2. 用python向mongodb插入数据_Python操作MongoDB数据库(一)

    Python操作MongoDB数据库(一) 前言 干货文章继续出发!隔的时间有些久了哈,对 MongoDB 安装回顾的同学,可以看下windows环境 <初识 MongoDB 数据库>.这 ...

  3. Python 操作 MongoDB 数据库!

    作者 |黄伟呢 来源 |数据分析与统计学之美 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 先来看看MySQL与MongoDB 概念区别 ...

  4. 58 Node.js中操作mongoDB数据库

    技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder 的程序人生 1.数据库概述及环境搭建 1.1 为什么要使用数据库 动态网站中的数据都是存储在数据 ...

  5. PHP操作mongodb数据库操作类

    最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb ...

  6. Lua 操作 MongoDB 数据库实例

    最近有个工作是使用Nginx + Lua实现一个操作MongoDB数据库的API,主要实现其count和query功能.之前没有写过Lua,于是也就勉强着上手,在cloudwu的 lua-mongo ...

  7. python数据库模糊查询_Python操作mongodb数据库进行模糊查询操作示例

    本文实例讲述了Python操作mongodb数据库进行模糊查询操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pymongo import re ...

  8. Nodejs 操作 MongoDb 数据库

    一.在 Nodejs 中使用 Mongodb 在前面的博文我们给大家讲了如何使用命令操作 Mongodb,这篇博文开始我们给大家讲解一 下如何使用 Nodejs 来操作 Mongodb 数据库 Nod ...

  9. 使用mongoose 在 Node中操作MongoDB数据库

    MongoDB 关系型和非关系型数据库 关系型数据库(表就是关系,或者说表与表之间存在关系). 所有的关系型数据库都需要通过sql语言来操作 所有的关系型数据库在操作之前都需要设计表结构 而且数据表还 ...

最新文章

  1. 集成电路:迎国产替代浪潮,设计领域机会凸显
  2. 基于Proxy的小程序状态管理
  3. windows7环境下使用pip安装MySQLdb
  4. 醒醒,迪卡侬请停止“低调”!
  5. VMWare ubuntu虚拟机异常关闭打开报错:该虚拟机似乎正在使用中(下班虚拟机最好关闭,免得又异常关闭导致问题)(千万别在虚拟机下win+L锁屏,解锁后就打不开虚拟机了)
  6. location.search
  7. python嵌套列表字典_python中嵌套列表转为字典
  8. Windows 9信息曝光:统一开发接口、整合Cortana到任务栏
  9. Java基础11-封装(思想、访问权限、this、构造方法)
  10. 电脑提示0xc0000719设备未迁移如何解决
  11. [有限元] 四结点三角形单元和五结点三角形单元的形函数
  12. JavaScript MD5加密实现
  13. java类 (二):内部类
  14. matlab·计算机视觉·工具箱
  15. Rhythmbox中mp3中文乱码问题
  16. 怎么把视频里的一小段制作成gif图片?教你视频片断做成GIF
  17. 通讯录查询系统的设计与实现
  18. 分享本电子书Sql Server 20008 internals
  19. pyecharts第十节、地图(三、省份地图)
  20. 机器人李继红_电力设备

热门文章

  1. 基于Smart200的PTO脉冲发送(步进电机)及基本运动控制向导的设置内容
  2. 15单片机通过WIFI模块ESP8266实现手机远程监控可燃气体浓度
  3. 苹果手机怎么用流量下载大于200M的应用
  4. 调试经验——使用VBA显示Excel中所有faceId对应的图标 (Display all FaceID Icons in Excel with VBA)
  5. 香港旅游攻略香港旅游购物指南
  6. 【ArcGIS自定义脚本工具】利用聚合方法批量生成分辨率降低版本的栅格
  7. 那些年啊,那些事——一个程序员的奋斗史 ——32
  8. 阿里云视频点播测试问题解决 (获取播放地址播放)
  9. 产品设计太难了!别怕,给你5个优秀案例照着学
  10. 想了3年,实现只用了3个月