Pymongo MongoClient:如果您通过 URI 放入数据库,您如何将其取出?

bma*_*ies 2 python mongodb

的文档MongoClient说,人们可能会说“host=”并给出完整的 MongoDB URI。这些包括数据库名称。一旦我这样做了,有没有办法从 MongoClient 对象中提取数据库名称?我没有在源代码中发现它。

Leo*_*ael 6

该类MongoClient有一个名为的方法,get_default_database(default=None, [...other options...])记录如下:

获取 MongoDB 连接 URI 中指定的数据库。

MongoClient还有一个名为 的方法.get_database(name=None, [... other options...]) ,其中name=None参数定义为:

name(可选):数据库的名称 - 字符串。如果 None (默认值),则返回 MongoDB 连接 URI 中指定的数据库。

因此,如果您拥有的只是 URI,但该 URI 包含数据库名称,您可以像这样获取 MongoDB 数据库:

    mongo_database = pymongo.MongoClient(host=mongo_uri).get_default_database()
Run Code Online (Sandbox Code Playgroud)

或者像这样:

    mongo_database = pymongo.MongoClient(host=mongo_uri).get_database()
Run Code Online (Sandbox Code Playgroud)

default=上面第一个方法中的参数和第二name=个方法中的参数执行相同的功能:允许应用程序程序员覆盖 URI 中指定的数据库,或者如果 URI 中未提供数据库则对其进行补充。


Jam*_*wer 5

我相信你正在寻找的东西可以在pymongo.uri_parser. 特别是,看看parse_uri函数。parse_uri将 MongoDB URI 作为参数,并返回一个字典,其中包含诸如username,password以及最重要的是database.

例子:

from pymongo.uri_parser import parse_uri

mongo_uri = 'mongodb://james:brewer@localhost/test'

for k, v in parse_uri(mongo_uri).items():
    print k, ':', v
Run Code Online (Sandbox Code Playgroud)

将打印

username : james
nodelist : [('localhost', 27017)]
database : test
connection : None
password : brewer
options : {}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!