Pymongo MongoClient:如果你把数据库放在via URI中,你怎么把它取回来?

时间:2013-02-15 22:55:29

标签: python mongodb

MongoClient的文档说可以说'host ='并提供完整的MongoDB URI。那些包括数据库名称。一旦我这样做,有没有办法从MongoClient对象中提取数据库名称?我没有在源代码中发现它。

2 个答案:

答案 0 :(得分:3)

我相信您所寻找的内容可以在pymongo.uri_parser中找到。特别是,请查看parse_uri函数。 parse_uri将MongoDB URI作为参数,并返回包含usernamepassword以及最重要的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

将打印

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

希望这有帮助!

答案 1 :(得分:2)

MongoClient 类有一个 method called get_default_database(default=None, [...other options...]) 记录为:

<块引用>

获取在 MongoDB 连接 URI 中命名的数据库。

MongoClient 也有一个 method called .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()

或者像这样:

    mongo_database = pymongo.MongoClient(host=mongo_uri).get_database()

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