CSDN:jcLee95
这里不讲解Python3开发环境的安装和配置。PyMongo是 MongoDB 的官方 MongoDB Python 驱动程序,我们使用如下命令安装pymongo包:
pip install pymongo
MongoClient
对象MongoClient
对象是一个类,为MongoDB集群的客户端表示。其实例可以代表独立的MongoDB服务器、副本集或分片集群,负责维护集群的最新状态,并可能缓存与此相关的资源,包括用于监控的后台线程和连接池。
host(可选):要连接的单个mongod或mongos实例的主机名或IP地址或Unix域套接字路径,或者mongodb URI,或者主机名/ mongodb URIs列表。如果“主机”是 IPv6文本必须用 “[
” 和 “]
” 字符括起来,遵循RFC2732 URL语法(例如,对于localhost为“[::1]
”)。
port(可选):要连接的端口号
document_class:用于从此客户端上的查询返回的文档的默认类
tz_aware(可选):如果为“True”,类~datetime.datetime
实例在文档(document)
中通过类`MongoClient’中的文档作为值返回,将是时区感知(timezone aware)的(否则它们将是naive的)
connect(可选):如果为True
(默认),则后台立刻开始连接到MongoDB。否则在第一次操作数据库时才开始连接。
type_registry(可选):bson.codec_options.TypeRegistry
类的实例,用于允许用于自定义类型的编解码。
还有一些可选的数组参数,
其他可选参数可以作为关键字参数传递:
True
,强制此客户端作为独立客户端直接连接到指定的MongoDB主机。如果为False
,客户端连接到给定MongoDB主机所属的整个副本集。pymongo.server_ description.serverdescription
对象的列表作为参数,并返回应该被认为适合所需操作的服务器描述的列表。MongoClient
实例的应用程序的名称。MongoDB 3.4及更高版本将在建立每个连接时在服务器日志中打印该值。它也记录在慢速查询日志和配置文件集合中。~pymongo.driver_info.DriverInfo
在建立连接时将其名称、版本和平台添加到服务器日志中打印的消息中。~uuid.UUID
类。有效值为pythonLegacy
(默认值)、 javaLegacy
、 csharpLegacy
、standard' 和
unspecified`。新应用程序应考虑将其设置为“standard”以实现跨语言兼容性。watch()
方法watch()
方法用于观察此群集上的更改,使用隐式的初始$changeStream
阶段执行聚合,并返回~pymongo.change_stream.ClusterChangeStream
类游标,它
迭代此群集上所有数据库的更改。
watch(self, pipeline=None, full_document=None, resume_after=None,
max_await_time_ms=None, batch_size=None, collation=None,
start_at_operation_time=None, session=None, start_after=None)
参数:
$changeStream
'阶段的完整文档。允许的值:“updateLookup”。当设置为“updateLookup”时,部分更新的更改通知将包括描述文档更改的增量,以及在更改发生后某个时间更改的整个文档的副本。~pymongo.collation.Collation
类~pymongo.client_session.ClientSession
类返回值:
~pymongo.change_stream.ClusterChangeStream
类方法 | 说明 |
---|---|
event_listeners() | 为此客户端注册的事件侦听器 |
topology_description() | 连接的MongoDB部署的描述 |
address() | 当前独立、主或mongos或无的(主机、端口) |
primary() | 副本集的当前主副本的“(主机、端口)”。 如果此客户端未连接到复制集,没有主服务器,或者此客户端是在没有“复制集”选项的情况下创建的,则返回“None” |
secondaries() | 该客户已知的次要客户端。 一系列(主机、端口)对。如果此客户端未连接到复制集,没有可见的辅助节点,或者此客户端是在没有“复制集”选项的情况下创建的,则为空 |
arbiters() | 副本集中的Arbiters 一系列(主机、端口)对。如果此客户端未连接到副本集,没有Arbiters,或者此客户端是在没有"replicaSet"集”选项的情况下创建的,则为空 |
is_primary() | 是否该客户端连接到可以接受写入的服务器 |
is_mongos() | 如果这个客户端连接到mongos。如果客户端未连接,这将一直阻止,直到建立连接,或者如果没有可用的服务器,将引发ServerSelectionTimeoutError错误 |
max_pool_size() | 到每个连接的服务器的最大允许并发连接数。如果与所请求的服务器有“maxPoolSize”未完成的连接,对服务器的请求将被阻止。默认为100。不能为0 |
min_pool_size() | 池将维护到每个连接的服务器的最小所需并发连接数。默认值为0 |
max_idle_time_ms() | 在删除和替换之前,连接在池中可以保持空闲的最大毫秒数。默认为“None”(无限制) |
nodes() | 当前连接的所有服务器的集合 |
max_bson_size() | 连接的服务器接受的最大BSON对象,以字节为单位 |
max_message_size() | 连接的服务器接受的最大消息,以字节为单位 |
max_write_batch_size() | 如果客户端没有连接,这将阻止连接,直到建立连接,或者如果没有服务器可用,将引发 ServerSelectionTimeoutError 错误 |
local_threshold_ms() | 服此实例的本地阈值 |
server_selection_timeout() | 此实例的服务器选择超时(秒) |
retry_writes() | 如果此实例应该重试支持的写操作 |
retry_reads() | 如果此实例应该重试支持的读操作 |
# 伪代码
import pymongo
# 用MongoDB部署的连接字符串替换uri字符串。
conn_str = "mongodb+srv://<username>:<password>@<cluster-address>/test?retryWrites=true&w=majority"
# 设置连接超时的时间为500ms(5s)
client = pymongo.MongoClient(conn_str, serverSelectionTimeoutMS=5000)
try:
print(client.server_info()) # 输出服务信息
except Exception:
print("无法连接到MongoDB服务") # 提示异常
import pymongo
client = pymongo.MongoClient()
这个写法相当于
import pymongo
client = pymongo.MongoClient("localhost", 27017)
其中27017
是Mongo服务的默认使用端口。
需要提醒的是使用如阿里云等任意主流云服务器的朋友,在进行远程数据库连接时,比如确保你服务器上配置的数据库端口号时对外开放的才可以从外部访问连接。这里可以登录云服务器提供商控制台进行安全配置以实现相关功能,详细请查询云服务提供商给出的文档。
import pymongo
client = pymongo.MongoClient("8.129.131.210", 27017)
在连接口数据库服务后,我们需要使用某个数据库,该数据库下的某个集合,这时我们是通过数据库名和集合名来操作的。
import pymongo
client = pymongo.MongoClient() # 连接到数据库服务
database = client.数据库名 # 数据库对象
collection = database.集合名 # 该数据库下的集合对象
基本上把命令中方法命名改成复合Python方法/函数命名习惯的方法名就可以对应了。
MongoDB命令 | PyMongo方法 |
---|---|
inserOne | inser_one |
insertMany | insertmany |
find | find |
updateOne | update_one |
updateMony | update_mony |
deleteOne | delete_one |
deleteMany | delete_many |