MongoDB服务器托管在Docker容器中。创建了具有root用户权限的超级用户,可以使用用户名和密码登录。使用pymodm从Python脚本连接到MongoDB服务器。
我能够从Shell以及Compass工具连接到Docker托管的MongoDB服务器。使用Python脚本以编程方式连接和插入新项目的尝试失败,并显示“身份验证失败”错误。
脚本如下:
from pymodm import connect
from pymodm import MongoModel, fields
import urllib.parse
class Dummy(MongoModel):
email = fields.EmailField(primary_key=True)
name = fields.CharField()
class Meta:
connection_alias = 'Mongo'
# Establish a connection to the database.
mongo_uri = "mongodb://monadmin:" + urllib.parse.quote("myPassword@123") + "@192.168.x.x:27017/Test"
# Establish a connection to the database.
def Connect2DB()
try:
#connect('mongodb://localhost:27017/PMOTest')
connect(mongo_uri, alias="Mongo")
print("db connection success")
return True
except:
print("db connection failed")
return False
def Insert_record():
try:
Dummy(email="hello@test.com", name="test").save()
print("save success")
except ex:
print("save failed")
if __name__ == "__main__":
if Connect2DB():
Insert_record()
连接成功,但插入记录失败,并显示以下错误:pymongo.errors.OperationFailure:身份验证失败
答案 0 :(得分:4)
mongo_uri = "mongodb://monadmin:" + urllib.parse.quote("myPassword@123") + "@192.168.x.x:27017/Test?authSource=admin
您需要添加?authSource=admin
对于我正在使用的mongo docker映像,它包含一个名为admin的数据库。要使用管理数据库进行身份验证,您必须通过将authSource部分添加到uri来告诉命令对此进行身份验证。