Pymongo MongoClient: 通过URI放入数据库后如何取出?

4 投票
2 回答
6272 浏览
提问于 2025-04-17 16:03

关于MongoClient的说明里提到,你可以使用'host='来提供一个完整的MongoDB连接地址,这个地址里包含了数据库的名字。那么问题来了,一旦我这样做了,有没有办法从MongoClient对象中提取出这个数据库的名字呢?我在源代码里找了半天也没找到。

2 个回答

6

MongoClient 类里面有一个叫做 方法 get_default_database(default=None, [...other options...]),它的功能是:

获取在 MongoDB 连接地址中指定的数据库。

MongoClient 还有一个叫做 方法 .get_database(name=None, [... other options...]),其中 name=None 这个参数的意思是:

name(可选):数据库的名称 - 一个字符串。如果是 None(默认值),那么就会返回在 MongoDB 连接地址中指定的数据库。

所以,如果你只有连接地址,但这个地址里面包含了数据库的名称,你可以这样获取 MongoDB 数据库:

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

或者这样:

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

上面第一个方法中的 default= 参数和第二个方法中的 name= 参数功能是一样的:它们都允许程序员覆盖连接地址中指定的数据库名称,或者在连接地址没有提供数据库名称的情况下补充一个。

8

我觉得你要找的东西可以在 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

这段代码会打印出

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

希望这对你有帮助!

撰写回答