在python中連接MongoDB集群(MongoDB Cluster)

建立了一個mongo集群,有3個節點,分別為:
mongo-1
mongo-2
mongo-3

mongo集群沒有提供類似mysql集群和redis集群中的虛擬IP。在使用的時候需要客戶端連接時指定mongo集群的所有節點。

python連接MongoDB的驅動為pymongo, 基于pymongo 有封裝的mongoengine,以及基于mongoengine 的 flask_mongoengie.

具體寫法如下:

pymongo

#!/usr/bin/env python
# coding=utf-8

from pymongo import MongoClient

# single mongo
#c = MongoClient(host="mongo-1", port=28010) # okay
#c = MongoClient('mongodb://admin:123456@mongo-1:28010,mongo-2:28010/?replicaSet=rsname')

# mongo cluster
c = MongoClient('mongodb://admin:123456@mongo-1:28010,mongo-2:28010,mongo-3:28010')
#c = MongoClient('mongodb://admin:123456@mongo-1:28010,mongo-2:28010,mongo-3:28010/?readPreference=secondary')
#c = MongoClient('mongodb://admin:123456@mongo-3:28010/?readPreference=secondary')

print c.nodes
print c.database_names()

mongoengine

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

connect('mpc', host='mongodb://mpc:mpc@mongo-1:28010,mongo-2:28010,mongo-3:28010/mpc')

class User(Document):
    title = StringField(required=True, max_length=200)

print User.objects.count()

flask_mongoengine

from flask_mongoengine import MongoEngine

from flask import Flask


app = Flask(__name__)

#app.config.from_pyfile('the-config.cfg')

#app.config['MONGODB_SETTINGS'] = {
#        'db': 'mpc',
#        'username': 'mpc',
#        'password': 'mpc',
#        'host': 'mongo-2',
#        'port': 28010 
#        }

""" 
# NOTE: connect_settings invalid.
app.config['MONGODB_SETTINGS'] = [
        {
        'db': 'mpc',
        'username': 'mpc',
        'password': 'mpc',
        'host': 'mongo-1',
        'port': 28010 
        },
        {
        'db': 'mpc',
        'username': 'mpc',
        'password': 'mpc',
        'host': 'mongo-2',
        'port': 28010 
        }
        ]
"""

app.config['MONGODB_SETTINGS'] = {
        'host': 'mongodb://mpc:mpc@mongo-1:28010,mongo-2:28010,mongo-3:2801/mpc',
        }


db = MongoEngine(app)

class User(db.Document):
    email = db.StringField(required=True)
    first_name = db.StringField(max_length=50)
    last_name = db.StringField(max_length=50)

print 'filter', User.objects.filter()

擴展閱讀:

python_mongo
https://github.com/jiaxiaolei/projects/tree/master/python_mongo
簡介:
上面示例代碼可以在github上看到。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容