【问题标题】:pymongo default database connectionpymongo 默认数据库连接
【发布时间】:2022-05-11 09:48:14
【问题描述】:

我需要从我的 Python 代码连接到 MongoDB,我唯一拥有的是一个 url。根据mongo URL doc 我可以指定数据库名称:

mongodb://host/db_name

现在我想完全使用从 URL 指定的数据库,不想手动解析它来提取数据库的名称。但是MongoClient 没有访问默认的接口。任何想法如何管理这个?

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    PyMongo/MongoClient 提供了一个get_default_database() 方法:

    from pymongo import MongoClient
    
    client = MongoClient("mongodb://host/db_name")
    db = client.get_default_database()
    

    https://pymongo.readthedocs.io/en/stable/api/pymongo/mongo_client.html

    【讨论】:

    【解决方案2】:

    您可以为此使用 pymongo.uri_parser.parse_uri:

    Python 2.7.5 (default, Jul 12 2013, 14:44:36) 
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> uri = "mongodb://user:pass@example.com/my_database/?w=2"
    >>> from pymongo.uri_parser import parse_uri
    >>> parse_uri(uri)
    {'username': 'user', 'nodelist': [('example.com', 27017)], 'database': 'my_database/',
    'collection': None, 'password': 'pass', 'options': {'w': 2}}
    

    在 PyMongo 2.6 中将有一个 get_default_database() 方法。见PYTHON-461

    【讨论】:

      【解决方案3】:

      看起来它根本不起作用。启动时pymongo 转储警告:

      UserWarning:URI 中的数据库名称或 authSource 被忽略。

      【讨论】:

        【解决方案4】:

        我从 Dan 的回答中得到了这个错误:

        OperationFailure: Authentication failed., full error: {'ok': 0.0, 'errmsg': 'Authentication failed.', 'code': 18, 'codeName': 'AuthenticationFailed'}
        

        解决方案

        我意识到我需要指定身份验证源,因为我的实例需要身份验证。如果你面临同样的问题,请使用这个:

        from pymongo import MongoClient
        
        client = MongoClient("mongodb://<USERNAME>:<PASSWORD>@<HOST>/<DEFAULT_DATABASE>?authSource=admin")
        db = client.get_default_database()
        
        # Then you may query
        db["my_col"].find_one({})
        

        相应地填写&lt;USERNAME&gt;&lt;PASSWORD&gt;&lt;HOST&gt;&lt;DEFAULT_DATABASE&gt;(阅读更多关于MongoDB connection strings的信息)。

        您可能在另一个数据库中有authSource,但我认为admin 是默认值。

        【讨论】:

          猜你喜欢
          • 2012-06-28
          • 1970-01-01
          • 2014-04-20
          • 1970-01-01
          • 1970-01-01
          • 2017-11-13
          • 2011-08-28
          • 2013-09-29
          • 1970-01-01
          相关资源
          最近更新 更多