python连接MongoDB
MongoDB: 多用于文档数据库存非结构化数据,NoSQL非关系型数据库。
python连接mongo
config
MONGODB:
USER: $MONGODB_USER
PASSWORD: $MONGODB_PW
HOST: host
PORT: 27017
QUERY_STRING: 'replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
SUFFIX: 'Dev'
MongoClient
from pymongo import MongoClient
try:
# Python 3.x
from urllib.parse import quote_plus
except ImportError:
# Python 2.x
from urllib import quote_plus
mongo_uri = "mongodb://{USER}:{PASSWORD}@{HOST}:{PORT}/xxx?{QUERY_STRING}".format(
USER=quote_plus(mongo_conf['USER']),
PASSWORD=quote_plus(mongo_conf['PASSWORD']),
HOST=mongo_conf['HOST'],
PORT=mongo_conf['PORT'],
QUERY_STRING=quote_plus(mongo_conf['QUERY_STRING'])
)
def auth_user(client: MongoClient):
# 先连接系统默认数据库admin
db = client.admin
db.authenticate(mongo_conf['USER'], mongo_conf['PASSWORD'], mechanism='SCRAM-SHA-1')
# 获取client
client = MongoClient(mongo_uri, ssl=True, ssl_ca_certs='rds-combined-ca-bundle.pem')
# get db
MongoTest = client['HistoryWebTool' + mongo_conf['SUFFIX']]
常用操作
from pymongo.collection import Collection
mongo_collection: Collection = MongoTest.表名
# upsert 存在则更新,不存在则insert
filter_dict = {"object_id": object_id}
update_dict = {"$set": {"data": data,
"success": success,
"create_date": get_current_time_utc()}}
mongo_collection.update_one(filter_dict, update_dict, upsert=True)
# 查
doc = mongo_collection.find_one({"$query": {'file_id': object_id},
"$orderby": {"create_date": -1}})
# 存在的不动, 不存在的插入
start_time_filter_dict = {"object_id": object_id}
start_time_update_dict = {
"$setOnInsert": {"create_date": get_current_time_utc(),
"user_id": user_id}
}
mongo_collection.update_one(start_time_filter_dict, start_time_update_dict, upsert=True)
索引
mongo_collection.create_index(
[("file_id", pymongo.DESCENDING)], background=True
)
更做操作,详见 https://www.runoob.com/mongodb/mongodb-tutorial.html