Pymongo MongoClient: 通过URI放入数据库后如何取出?
关于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 : {}
希望这对你有帮助!