2016-06-30 7 views
1

Я строю mongodb-кластер с репликацией и очертаниями. Я настроен на проверку подлинности на основе x509. я подключиться к базе данных (mongos) по Монго как:Как подключиться к клану mongodb с помощью mongoengine

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

Как подключиться к кластеру с помощью mongoengine?

я не нашел описание параметров соединения для метода register_connection:

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

Например PyMongo обеспечивает необходимые параметры http://api.mongodb.com/python/current/examples/authentication.html#mongodb-x509, но мне нужно использовать mongoengine в существующем коде.

ответ

3

Я посмотрел dokstring "register_connection" и я нашел:

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

И я использую это как:

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 базы на PyMongo. Mongo_url нравится «mongodb: // user: passwd @ ip: port, ip: port/db» хорошо работает в MongoEngine и Pymongo.

Код выглядит так:

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() 

Для получения дополнительной информации, http://www.jianshu.com/p/a0a23443146e