如何使用Python使用“ authenticationDatabase admin”选项从mongodb获取数据?

时间:2019-10-25 14:06:03

标签: python-3.x mongodb

我必须从远程mongodb获取数据。我可以在命令提示符下使用以下命令:

mongo -u root -p "xxxpass" xxxhost:27017/xxxdb --authenticationDatabase admin

但是,使用python,在mycols.find({},{ "_id": 0})步骤中,我获得身份验证失败。

我将pymongo.MongoClienthost, 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"选项?

从现在开始谢谢大家

1 个答案:

答案 0 :(得分:0)

该参数为authSource(如果未提供,则为admin)(默认为admin),因此可能会出现其他情况(可能使用用户名和密码)。

我可能会引导您使用连接字符串;习惯了它们之后,管理起来会容易一些。该代码段可能会有所帮助。

connection_string = 'mongodb://{}:{}@{}:{}/{}?authSource={}'.format(username, password, host, port, database, auth_source)
client = pymongo.MongoClient(connection_string)