ArcticDB是否支持带凭证的MongoDB连接?添加凭证后触发调用错误
解决Arctic连接带凭证MongoDB时的
TypeError: 'Database' object is not callable问题 可能的触发原因
这个错误大多是因为Arctic与pymongo版本不兼容,或是带凭证的连接字符串格式不对,导致Arctic解析连接时出错,误将Database对象当成可调用函数。另外,MongoDB用户权限配置不全也可能引发这类问题。
具体解决步骤
1. 修正连接字符串格式
带凭证的连接需要明确指定Arctic默认使用的arctic数据库,避免解析歧义:
store = Arctic('mongodb://admin:admin@localhost:27017/arctic')
也可以通过先创建MongoClient再指定数据库的方式初始化:
from pymongo import MongoClient client = MongoClient('mongodb://admin:admin@localhost:27017') store = Arctic(client['arctic'])
2. 检查MongoDB用户权限
确保你的admin用户拥有arctic数据库的读写权限,临时测试可以给用户赋予超级权限(生产环境谨慎使用):
use admin db.createUser({ user: "admin", pwd: "admin", roles: [ { role: "root", db: "admin" } ] })
执行后重启MongoDB服务,再尝试连接。
3. 匹配Arctic与pymongo的兼容版本
Arctic对pymongo版本依赖严格,版本不匹配会引发各种奇怪错误。建议卸载现有版本后安装兼容组合:
pip uninstall -y arctic pymongo # 示例兼容版本组合:Arctic 1.79.0 + pymongo 3.12.0 pip install arctic==1.79.0 pymongo==3.12.0
4. 排查代码命名冲突
检查代码中是否有变量名和Database、arctic重名的情况,比如:
# 错误示例:变量名覆盖了pymongo的Database类 Database = "some_value" # 或者 arctic = "other_value"
这种命名冲突会导致调用时出现类型错误,需要修改变量名。
验证测试
先单独用pymongo测试连接是否正常:
from pymongo import MongoClient client = MongoClient('mongodb://admin:admin@localhost:27017/arctic') db = client['arctic'] # 如果能输出集合列表,说明连接没问题 print(db.list_collection_names())
再测试Arctic初始化:
from arctic import Arctic store = Arctic('mongodb://admin:admin@localhost:27017/arctic') store.initialize_library('test_lib') # 输出包含test_lib则说明初始化成功 print(store.list_libraries())
内容的提问来源于stack exchange,提问作者Sergej Zivkovic
相关产品推荐
相关产品推荐

