2016-06-30 29 views
1

Ich bin mongodb-Cluster mit Replikation und Sharding bauen. Ich bin x509-basierte Authentifizierung festgelegt. Ich bin so in der Datenbank (mongos) von Mongo verbinden:Verbindung mit dem Mongodb-Cluster mit Mongoengine

mongo admin --ssl --sslCAFile mongoCA.pem \ 
--sslPEMKeyFile client.pem -u user -p password --host my.host.com --port 27017 

Wie verbinde ich mit dem Cluster der mongoengine verwenden?

def register_connection (alias, name = None, host = None, port = None, 
         read_preference = READ_PREFERENCE, 
         username = None, password = None, authentication_source = None, 
         ** Kwargs): 

Zum Beispiel PyMongo stellt die notwendigen Optionen http://api.mongodb.com/python/current/examples/authentication.html#mongodb-x509 aber ich brauche verwenden mongoengine in vorhandenen Code:

hat die Beschreibung der Anschlussmöglichkeiten für die Methode register_connection ich nicht finden.

Antwort

3

Ich sah dokstring "register_connection" und ich fand:

:param kwargs: allow ad-hoc parameters to be passed into the pymongo driver 

Und ich dies als:

import os 
import ssl 
from mongoengine import DEFAULT_CONNECTION_NAME, register_connection 
from pymongo import ReadPreference 

db_host = os.getenv('DB_HOST', 'localhost') 
db_port = int(os.getenv('DB_PORT', '27017')) 
db_name = os.getenv('DB_DATABASE', 'mydatabase') 

ssl_certfile = os.getenv('SSL_SERTFILE', 'client.pem') 
ssl_cert_reqs = ssl.CERT_REQUIRED 
ssl_ca_certs = os.getenv('SSL_CA_CERTS', 'mongoCA.pem') 

db_user = os.getenv('DB_USER', 'myUser') 
db_pass = os.getenv('DB_PASS', '') 

ssl_config = { 
    'ssl': True, 
    'ssl_certfile': ssl_certfile, 
    'ssl_cert_reqs': ssl_cert_reqs, 
    'ssl_ca_certs': ssl_ca_certs 
} 

register_connection(alias=DEFAULT_CONNECTION_NAME, 
        name=db_name, 
        host=db_host, 
        port=db_port, 
        username=db_user, 
        password=db_pass, 
        read_preference=ReadPreference.NEAREST, 
        authentication_source=db_name, 
        **ssl_config) 
0

MongoEngine ist Basis auf pymongo. Ein mongo_url wie 'mongodb: // Benutzer: passwd @ ip: port, ip: port/db' funktioniert gut in MongoEngine und Pymongo.

Der Code ist wie folgt:

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

connect('mpc', host='mongodb://mpc:[email protected]:28010,mongo-2:28010,mongo-3:28010/mpc') 

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

print User.objects.count() 

Weitere Informationen http://www.jianshu.com/p/a0a23443146e