我必须从远程mongodb获取数据。我可以在命令提示符下使用以下命令:
mongo -u root -p "xxxpass" xxxhost:27017/xxxdb --authenticationDatabase admin
但是,使用python,在mycols.find({},{ "_id": 0})
步骤中,我获得身份验证失败。
我将pymongo.MongoClient
与host, port, user, password
一起使用。但是,我还没有弄清楚如何在代码中实现authenticationDatabase admin
。我使用过authSource="admin"
,但是没有用。
即使我在命令提示符下跳过--authenticationDatabase admin
命令,也遇到相同的错误。
import pymongo
import pprint
import os
import urllib
dir_path = os.path.dirname(os.path.realpath(__file__))
host = "xxxhost"
port = 27017
dbname = "xxxdb"
authdb = "admin"
user = "root"
password = "xxxpass"
tablenames = ["companies"]
connection = [host, port, dbname, authdb, user, password]
def getdata(connection, tablenamelist):
myclient = pymongo.MongoClient(host=connection[0], port=connection[1], username=urllib.parse.quote(connection[4]), password=urllib.parse.quote(connection[5]), authSource="admin")
mydb = myclient[connection[2]]
for elem in tablenamelist:
mycols = mydb[elem]
rows = ""
with open(dir_path+'/'+elem+'.txt','w') as f:
for elm in mycols.find({},{ "_id": 0}):
f.write(str(elm) + "\n")
rows = rows + str(elm)
f.close()
print('tablename:', elem)
getdata(connection, tablenames)
如何实现authenticationDatabase = "admin"
选项?
从现在开始谢谢大家
答案 0 :(得分:0)
该参数为authSource(如果未提供,则为admin)(默认为admin),因此可能会出现其他情况(可能使用用户名和密码)。
我可能会引导您使用连接字符串;习惯了它们之后,管理起来会容易一些。该代码段可能会有所帮助。
connection_string = 'mongodb://{}:{}@{}:{}/{}?authSource={}'.format(username, password, host, port, database, auth_source)
client = pymongo.MongoClient(connection_string)