You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python连接MongoDB数据库遇错误,求排查(附代码)

Python连接MongoDB报错的修复方案

原代码存在的问题

  • 过时认证方法:authenticate() 是PyMongo 3.x之前的旧用法,现已不推荐,易引发兼容性问题
  • 认证数据库错误:原代码对test库做认证,但目标库是testdb,若用户是在testdb下创建的,此处认证对象不符
  • 连接逻辑拆分:单独调用认证方法,不如直接在连接配置中整合认证信息更可靠

修复后的代码示例

方式1:连接字符串整合认证信息

import pymongo

DATABASE_NAME = "testdb"
DATABASE_USERNAME = "testuserid"
DATABASE_PASSWORD = "testpass"
# 连接字符串包含地址、端口、用户名、密码及认证数据库
DATABASE_URI = f"mongodb://{DATABASE_USERNAME}:{DATABASE_PASSWORD}@10.10.100.100:22222/{DATABASE_NAME}?authSource={DATABASE_NAME}"

try:
    myclient = pymongo.MongoClient(DATABASE_URI)
    mydb = myclient[DATABASE_NAME]
    # 验证连接有效性(可选,通过获取集合列表确认)
    mydb.list_collection_names()
    print("[+] Database connected!")
except Exception as e:
    print("[+] Database connection error!")
    raise e

方式2:通过参数传递认证信息

若不想在URI中暴露密码,可拆分参数传递:

import pymongo

DATABASE_NAME = "testdb"
DATABASE_HOST = "10.10.100.100"
DATABASE_PORT = 22222
DATABASE_USERNAME = "testuserid"
DATABASE_PASSWORD = "testpass"

try:
    myclient = pymongo.MongoClient(
        host=DATABASE_HOST,
        port=DATABASE_PORT,
        username=DATABASE_USERNAME,
        password=DATABASE_PASSWORD,
        authSource=DATABASE_NAME  # 必须与用户创建时指定的数据库一致
    )
    mydb = myclient[DATABASE_NAME]
    mydb.list_collection_names()
    print("[+] Database connected!")
except Exception as e:
    print("[+] Database connection error!")
    raise e

关键注意事项

  • 认证数据库(authSource):如果用户是在admin库创建的,需将authSource改为admin,而非目标库testdb
  • PyMongo版本:执行pip install --upgrade pymongo确保使用最新版
  • 网络权限:确认本地机器能访问10.10.100.100的22222端口,无防火墙或安全组限制

内容的提问来源于stack exchange,提问作者Jayven Javier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 07:40:32