在Python中连接MongoDB集群(MongoDB Cluster)

建立了一个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。

具体写法如下:

pymongo

# 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:123456@172.16.250.238:27017") # ret : ['admin', 'config', 'local']
# c = MongoClient(host="mongodb://admin:123456@172.16.250.238:27017/admin") # ret : ['admin', 'config', 'local']

# mongo cluster
# c = MongoClient('mongodb://test:123456@172.16.250.233:27017,172.16.250.234:27017,172.16.250.237:27017/test') # ret : ['test']
# c = MongoClient('mongodb://test:123456@172.16.250.233:27017,172.16.250.234:27017,172.16.250.237:27017/test?replicaSet=rs0') # ret : ['test']
# c = MongoClient('mongodb://test:123456@172.16.250.233:27017,172.16.250.234:27017,172.16.250.237:27017/test?readPreference=secondary') # ret : ['test']

print(c.list_database_names())

mongoengine

# coding=utf-8

from mongoengine import connect
from mongoengine import Document
from mongoengine import StringField

# single mongo
connect('admin', host='mongodb://admin:123456@172.16.250.238:27017')

# mongo cluster
# connect('test', host='mongodb://test:123456@172.16.250.233: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)

flask_mongoengine

# coding=utf-8
from flask_mongoengine import MongoEngine
from flask import Flask

app = Flask(__name__)

# app.config['MONGODB_SETTINGS'] = {
#         'host': 'mongodb://admin:123456@172.16.250.238: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:123456@172.16.250.238:27017/admin',
                   }

 原文地址:https://www.jianshu.com/p/a0a23443146e

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值