无法使用 MongoEngine 进行身份验证。 PyMongo 工作。如何让 MongoEngine 进行身份验证?
Can't authenticate using MongoEngine. PyMongo works. How do I get MongoEngine to authenticate?
我正在尝试使用 mongoengine.connect() 对 MongoDB 数据库进行身份验证。当我使用 pymongo.MongoClient() 时,代码可以完美运行,但是 mongoenine.connect() 会抛出此错误:
pymongo.errors.OperationFailure: command createRole requires authentication
我相信连接参数是相同的,而且 MongoEngine 仍然使用 PyMongo 进行连接,所以我对这里的问题感到困惑。
我打印了 PyMongo 和 MongoEngine 返回的 MongoClients,它们略有不同:
Pymongo MongoClient:
MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True)
MongoEngine MongoClient:
MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
read_preference 是否以某种方式影响我的连接能力?
调用代码如下:
user_admin_client = pymongo.MongoClient(
f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
)
print(user_admin_client)
user_admin_client = mongoengine.connect(db='my_db',
username=usern,
password=pswd,
host='x.x.x.x',
alias='init'
)
print(user_admin_client)
如何让 MongoEngine 工作?我在这里做错了什么?
------ 2019 年 5 月 9 日更新:
我尝试了以下代码:
user_admin_client = mongoengine.connect(
f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
)
print(user_admin_client)
我得到以下信息:
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
...traceback...
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it
我对为什么 MongoClient 现在尝试连接到本地主机感到有点困惑,因为我的 IP 地址肯定是正确输入的。即使使用 x.x.x.x:port
也没有做任何事情。
我不认为你做错了什么。
能否尝试使用 Mongo URI
本身通过 MongoEngine 进行连接。
类似于:
user_admin_client = mongoengine.connect('mongodb://{usern}:{pswd}@x.x.x.x/my_db')
print(user_admin_client)
您需要在连接上使用 host
参数
user_admin_client = mongoengine.connect(host='mongodb://{usern}:{pswd}@x.x.x.x/my_db')
我正在尝试使用 mongoengine.connect() 对 MongoDB 数据库进行身份验证。当我使用 pymongo.MongoClient() 时,代码可以完美运行,但是 mongoenine.connect() 会抛出此错误:
pymongo.errors.OperationFailure: command createRole requires authentication
我相信连接参数是相同的,而且 MongoEngine 仍然使用 PyMongo 进行连接,所以我对这里的问题感到困惑。
我打印了 PyMongo 和 MongoEngine 返回的 MongoClients,它们略有不同:
Pymongo MongoClient:
MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True)
MongoEngine MongoClient:
MongoClient(host=['x.x.x.x:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
read_preference 是否以某种方式影响我的连接能力?
调用代码如下:
user_admin_client = pymongo.MongoClient(
f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
)
print(user_admin_client)
user_admin_client = mongoengine.connect(db='my_db',
username=usern,
password=pswd,
host='x.x.x.x',
alias='init'
)
print(user_admin_client)
如何让 MongoEngine 工作?我在这里做错了什么?
------ 2019 年 5 月 9 日更新:
我尝试了以下代码:
user_admin_client = mongoengine.connect(
f'mongodb://{usern}:{pswd}@x.x.x.x/my_db'
)
print(user_admin_client)
我得到以下信息:
MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary())
...traceback...
pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] No connection could be made because the target machine actively refused it
我对为什么 MongoClient 现在尝试连接到本地主机感到有点困惑,因为我的 IP 地址肯定是正确输入的。即使使用 x.x.x.x:port
也没有做任何事情。
我不认为你做错了什么。
能否尝试使用 Mongo URI
本身通过 MongoEngine 进行连接。
类似于:
user_admin_client = mongoengine.connect('mongodb://{usern}:{pswd}@x.x.x.x/my_db')
print(user_admin_client)
您需要在连接上使用 host
参数
user_admin_client = mongoengine.connect(host='mongodb://{usern}:{pswd}@x.x.x.x/my_db')