建立了一个MongoDB集群,集群名称 replSet=rs0,包含以下 3 个节点:
172.16.250.233:27017 # SECONDARY
172.16.250.234:27017 # PRIMARY
172.16.250.237:27017 # SECONDARY
集群的 test 用户的密码为 “123456” ,只能访问 test 数据库。
另外还有一个MongoDB数据库单独部署在 172.16.250.238,其 admin 用户的密码为 “123456” ,只能访问 admin 数据库。
MongoDB集群没有提供类似MySQL集群和Redis集群中的虚拟IP。在使用的时候需要客户端连接时指定MongoDB集群的所有节点。
Python连接MongoDB的驱动为pymongo, 基于pymongo 有封装的mongoengine,以及基于mongoengine 的 flask_mongoengie。
具体写法如下:
# coding=utf-8
from pymongo import MongoClient
# single mongo
c = MongoClient(host="172.16.250.238", port=27017) # ret : ['admin', 'config', 'local']
# c = MongoClient(host="mongodb://172.16.250.238:27017") # ret : ['admin', 'config', 'local']
# c = MongoClient(host="mongodb://admin:[email protected]:27017") # ret : ['admin', 'config', 'local']
# c = MongoClient(host="mongodb://admin:[email protected]:27017/admin") # ret : ['admin', 'config', 'local']
# mongo cluster
# c = MongoClient('mongodb://test:[email protected]:27017,172.16.250.234:27017,172.16.250.237:27017/test') # ret : ['test']
# c = MongoClient('mongodb://test:[email protected]:27017,172.16.250.234:27017,172.16.250.237:27017/test?replicaSet=rs0') # ret : ['test']
# c = MongoClient('mongodb://test:[email protected]:27017,172.16.250.234:27017,172.16.250.237:27017/test?readPreference=secondary') # ret : ['test']
print(c.list_database_names())
# coding=utf-8
from mongoengine import connect
from mongoengine import Document
from mongoengine import StringField
# single mongo
connect('admin', host='mongodb://admin:[email protected]:27017')
# mongo cluster
# connect('test', host='mongodb://test:[email protected]:27017,172.16.250.234:27017,172.16.250.237:27017/test?readPreference=secondary')
class User(Document): # 类名需要与数据库中的集合名称一致
name = StringField(required=True, max_length=200)
users = User.objects.all() #返回所有的文档对象列表
for u in users:
print("name:",u.name)
# coding=utf-8
from flask_mongoengine import MongoEngine
from flask import Flask
app = Flask(__name__)
# app.config['MONGODB_SETTINGS'] = {
# 'host': 'mongodb://admin:[email protected]:27017/admin',
# }
# app.config.from_pyfile('mongo.cfg')
# app.config['MONGODB_SETTINGS'] = {
# 'db': 'admin',
# 'username': 'admin',
# 'password': '123456',
# 'host': '172.16.250.238',
# 'port': 27017
# }
app.config['MONGODB_SETTINGS'] = [
{
'db': 'test',
'username': 'test',
'password': '123456',
'host': '172.16.250.233',
'port': 27017
},
{
'db': 'test',
'username': 'test',
'password': '123456',
'host': '172.16.250.234',
'port': 27017
}, {
'db': 'test',
'username': 'test',
'password': '123456',
'host': '172.16.250.237',
'port': 27017
}
]
db = MongoEngine(app)
class User(db.Document):
name = db.StringField(required=True, max_length=50)
users = User.objects.all() # 返回所有的文档对象列表
for u in users:
print("name:", u.name)
配置文件 mongo.cfg 格式如下:
MONGODB_SETTINGS = {
'host': 'mongodb://admin:[email protected]:27017/admin',
}
原文地址:https://www.jianshu.com/p/a0a23443146e