2016-06-30 52 views
1

我使用复制和分片构建mongodb群集。我设置了基于x509的认证。 我对蒙戈为连接到数据库(mongos):如何使用mongoengine连接到mongodb群集

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基地。像mongodb:// user:passwd @ ip:port,ip:port/db这样的mongo_url在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