Pymongo 安装
安装pymongo
pip install pymongo
PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成;
数据库相关操作
连接及创建数据库
importpymongo
connect= pymongo.MongoClient("mongodb://localhost:27017/")
mydb= connect ["test"]
注意:在 MongoDB 中,初次创建数据库,数据库在获取内容之前不会真正创建的!
在实际创建数据库(和集合)之前,MongoDB 会一直等待您创建至少有一个文档(记录)的集合(表)。
连接及查看数据库
from pymongo importMongoClient
connect= MongoClient(host='localhost', port=27017, username="root", password="123456")
#connect= MongoClient('mongodb://localhost:27017/', username="root", password="123456")print(connect.list_database_names())
单例模式封装链接
注意:
mongodb的数据库连接池的问题,在创建MongoClient 的时候就已经创建了一个连接池,每一个操作(增删改查等)都会获取一个连接,执行操作后释放连接。
而连接池是不需要我们及时关闭的,我们可以在程序的生命周期中维护一个这样的单例,至于从连接池中拿出的连接,我们也不需要自行关闭。
所以这里self.db实例其实已经是一个现成的连接池了,而且线程安全。内置的连接池默认初始了100个连接,每一个操作(增删改查等)都会获取一个连接,执行操作后释放连接。
最大连接限制最大连接数限制,默认值为 1000000。
如果你需要为进程中支持大量并发MongoDB操作,请增加maxPoolSize:
client = MongoClient(host, port, maxPoolSize=200)
或使其不受限制:
client = MongoClient(host, port, maxPoolSize=None)
一旦池达到最大大小,其他线程就必须等待套接字可用。PyMongo并不限制等待套接字可用的线程数,应用程序有责任在负载高峰期间将其线程池的大小限制为绑定队列。除非waitQueueTimeoutMS定义,否则允许线程等待任何时间长度:
client = MongoClient(host, port, waitQueueTimeoutMS=100)
等待套接字等待时间超过100ms(在此示例中)的线程引发ConnectionFailure。如果限制负载高峰期间的操作持续时间比完成每个操作更为重要,请使用此选项。
另外不要为了每个操作都去创建一个新的MongoClient实例,这是非常低效的。
from pymongo importMongoClientclassMongoDBClient(object):#饿汉式 单例模式
def __new__(cls):if not hasattr(cls, 'instance'):
cls.instance= super(MongoDBClient, cls).__new__(cls)returncls.instance#代理ip Redis 连接池
def __init__(self):
uri= 'mongodb://账号:密码@128.777.244.19:27017/admin'self.mgdb= MongoClient(uri, connect=False, maxPoolSize=2000)defgetMongoClient(self):return self.mgdb
集合相关操作
检查 "customers" 集合是否存在
from pymongo importMongoClient
connect= MongoClient(host='localhost', port=27017, username="root", password="123456")
#connect= MongoClient('mongodb://localhost:27017/', username="root", password="123456")collist=mydb.list_collection_names()if "customers" incollist:print("The collection exists.")
创建名为 "customers" 的集合
importpymongo
connect= pymongo.MongoClient("mongodb://localhost:27017/")
test_db= connect["test"]
mycol= test_db["customers"]
获取数据库