如何使用pymongo来连接mongo各种的形态,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
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 如果是单机,但有用户名密码怎么办
#!/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 为大多数,并且如果读趋向于从库
#!/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/
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。