前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyMongo + Mongo 连接 “哎” 到底怎么连

PyMongo + Mongo 连接 “哎” 到底怎么连

作者头像
AustinDatabases
发布2020-05-18 15:20:55
2.7K0
发布2020-05-18 15:20:55
举报
文章被收录于专栏:AustinDatabases

NO SQL 的产品在操作方面虽然有很多 GUI 的工具,或者让人熟悉的命令行,但这些数据库软件的操作,如果有程序语言的加入则会变得要方便的多,Mongodb 如果使用一些语言,例如JAVASCRIPT 在内部操作很多事情将变得简单。通用的语言python 在操作数据库方面已经是很成熟的东西,连接mongodb 的python的方法也很多。

今天想正规以下如何使用pymongo来连接mongo 各种的形态做一个总结。

其中也发现了网上(中文)关于这方面的一个问题。很少有讲的或讲清楚的。

首先为什么要使用PYMONGO,主要的原因是他是官方推出的PYTHON API,怎么安装pymongo这与python有关,这里有一个事情就是安装pymongo 也是可以选择版本的, 需要根据你的生产环境安装的pymongo的版本,来对应你的变成的环境。

虽然小版本的不同不会造成什么困扰,但最好还是要统一的python for mongodb api 的版本。

上面使用了python3 ,并且使用了pymongo API 连接 mongodb的两种的格式,但这样的使用方式与实际相差甚远,属于模型和实体之间的差别,WHY

1 你的MONGODB 如果是单机,难道没有用户名密码

2 你的MONGODB 如果不是单机,是复制集怎么连接,怎么read prefer which one ,有没有线程池,等等问题

1 如果是单机,但有用户名密码怎么办

代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pymongo
import datetime
from pymongo import MongoClient

client = MongoClient('mongodb://admin:1234.com@192.168.198.56:27087/admin')

print (client)

那么使用pymongo 中的 mongoclient 使用MONGODB 标准的连接方式放到括号并用单引号标注就可以成功连接了

但大部分连接MONGODB的时候是复制集,这也是出问题最多的地方,网上大部分的要不不介绍,要不就还用mongoClient 继续伪装连接 mongodb的复制集中的某台机器。

上图虽然可以连接并可以操作mongodb 的复制集但实际上离实际上的真正灵活的操作复制集还差的远。

1 连接没有验证是否成功,这里不是上面的连接不报错,就说明连接成功了,恰恰是错误,报错会在你实体操作MONGODB 的时候,才能反映出来。这就说明,我们在连接MONGODB 的时候,必须要进行一个判断。按理说pymongo 连接如果情况异常是应该产生一些错误的。

为什么从3.0版本开始,MongoClient构造函数在连接服务器时不再阻塞,如果它们不可用,它也不再引发ConnectionFailure,如果用户的凭证错误,它也不再引发配置错误。

首先上面的连接格式是mongodb 3.6后提出的 DNS seedlist connection format, 使用+srv连接字符串修饰符自动将连接的tls(或等效ssl)选项设置为true。您可以通过在查询字符串中显式地将tls(或等效的ssl)选项设置为false(或ssl=false)来覆盖此行为。

那么问题来了按照标准的写法,如果我不想按照PYMONGO 默认的设置,连接尝试20秒尝试后,在返回可以连接不可以连接,这样的如果是失败的连接我就要等待20秒,这显然是不OK 的,

下面的写法可以将复制集以及连接错误返回的速度调整到0.3秒

另外还有一些其他的参数可以添加进来

例如我想设置一个连接池最大连接10个 最小 保留2个连接 不使用 SSL 连接方式,并且读的concernLevel 为大多数,并且如果读趋向于从库

代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pymongo
import datetime
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure
client = MongoClient('mongodb://root:1234.Com@192.168.198.56:27027,192.168.198.56:27037,192.168.198.56:27047/'
                     '?replicaSet=repl&authSource=admin&connectTimeoutMS=300&ssl=false&minPoolSize=2&maxPoolSize=10'
                     '&readConcernLevel=majority&readPreference=secondary')

try:
    client.admin.command('ismaster')
    print ("connect ok")

except ConnectionFailure:
print("can't connect mongodb.")
下图是读的导向的几种方式

所以pymongo 连接单机,复制集中以上的介绍基本上够用,如果还想在进一步了解一些其他的参数,可以访问下面的官方网站

https://docs.mongodb.com/manual/reference/connection-string/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档