当前位置: 首页 > 面试题库 >

pymongo auth在python脚本中失败

董花蜂
2023-03-14
问题内容

我已经安装了mongodb并启用了身份验证。及其工作发现。我可以使用robomongo应用程序从远程笔记本连接它:

Host: SERVER_IP
PORT: 27017
DATEBASE: prod-db
USERNAME: user_name
PASS: user_password
Auth Mechanism: MONGODB-CR

我们可以使用以下方法从服务器外壳本地连接:

$ mongo prod-db -u user_name -p user_password

一切正常,但是当我们使用pymongo api尝试时。身份验证失败。以下是python代码:

from pymongo import MongoClient

client = MongoClient()
client.prod_db.authenticate('user_name', 'user_password', mechanism='MONGODB-CR')
db = client.prod_db
result = db.users.find()

for document in result:
    print(document)

使用的工具:

python 2.7
pymongo versiob 3.3.1
MongoDB shell version: 2.6.10
$ mongod --version
db version v2.6.10
2016-10-31T16:34:59.868+0000 git version: nogitversion
2016-10-31T16:34:59.868+0000 OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

错误跟踪:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pymongo/database.py", line 1018, in authenticate
    connect=True)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 444, in _cache_credentials
    sock_info.authenticate(credentials)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 343, in authenticate
    auth.authenticate(credentials, self)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/auth.py", line 464, in authenticate
    auth_func(credentials, sock_info)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/auth.py", line 439, in _authenticate_mongo_cr
    sock_info.command(source, query)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/pool.py", line 239, in command
    read_concern)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/network.py", line 102, in command
    helpers._check_command_response(response_doc, None, allowable_errors)
  File "/usr/local/lib/python2.7/dist-packages/pymongo/helpers.py", line 205, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)

解决方案: 数据库名称存在问题,以下代码可以正常工作:

from pymongo import MongoClient

client = MongoClient('mongodb://user_name:user_password@localhost:27017/prod-db')
db = client['prod-db']

result = db.users.find()
for document in result:
    print document

问题答案:

请尝试这样的事情:

client = MongoClient("mongodb://user_name:user_password@SERVER_IP/prod-db")
db = client['prod-db']


 类似资料:
  • 我有一个用LiquiBase创建DB模式的glassfish应用程序。我已经将相同的应用程序迁移到Spring Boot。我没有删除DB架构。当我部署Spring应用程序并运行liquibase脚本时,我得到 更新:这可能与changelog文件中存储的MD5总和有关吗?所以新应用程序计算的md5与旧应用程序计算的md5不匹配,脚本被触发,导致明显的异常? 多谢

  • 问题内容: 每次执行脚本时,我都试图编写一个小的脚本来挂载VirtualBox共享文件夹。我想用Python来做,因为我正在尝试学习它的脚本。 问题是我需要特权才能启动安装命令。我可以将脚本作为sudo运行,但是我更喜欢它自己制作sudo。 我已经知道将密码写入.py文件并不安全,但是我们谈论的是根本不重要的虚拟机:我只想单击.py脚本并使它工作。 这是我的尝试: 我的python版本是2.6 问

  • 问题内容: 我正在将csh脚本转换为python脚本。该脚本调用一个占用大量内存的可执行文件,该文件需要非常大的堆栈,因此csh脚本将stacksize设置为无限制: 当我尝试在python中重现此脚本时,我会使用,以非常幼稚的方式执行它们,例如: 但是我不知道如何告诉操作系统以不受限制的堆栈大小运行这些可执行文件。有没有办法为python脚本中的调用指定stacksize?我应该使用一些底层系统

  • 问题内容: 我想检测python是否安装在Linux系统上,如果安装了python版本。 我该怎么做?是否有比解析输出更优雅的东西? 问题答案: 您可以按照以下方式使用: 元组记录在这里。您可以展开上面的Python代码,以适合您需求的方式格式化版本号,或者对它执行检查。 您需要检入脚本来处理未找到脚本的情况。 PS:我使用的语法有点奇怪,以确保与Python 2.x和3.x兼容。

  • 问题内容: 我是高级新手,请多多包涵。 我已经从另一位工程师那里继承了python脚本。为了方便起见,我希望能够从Windows bat文件启动脚本,但最初尝试通过从Windows命令行运行进行调试。 每当我从CMD启动脚本时,它似乎都可以启动,然后立即因错误而失败。 我的环境:Windows7 Pro和Windows10 Pro(发生相同的错误),Anaconda 3.7,Spyder 3.3.

  • 问题内容: 有谁知道将图标嵌入Python脚本的方法,这样当我创建独立的可执行文件(使用pyinstaller)时,不需要包含.ico文件吗?我知道使用py2exe可以实现,但是就我而言,我必须使用Pyinstaller,因为使用前者并不成功。我正在使用Tkinter。 我知道,但是如果我想使一个文件可执行,那是行不通的。 问题答案: 实际上,函数iconbitmap只能接收文件名作为参数,因此那

  • 问题内容: 我无法弄清楚在脚本开始时该做什么,例如在此Scikit示例中。 我一直在Google中寻找 Python文档字符串, 在功能中提供一些文档似乎很有用。但是我看不到脚本中间有什么作用。 问题答案: 在功能中提供一些文档似乎很有用 这是真的。除功能外,文档也可以在模块中提供。因此,如果您有一个像这样的文件: 您可以像这样访问其文档字符串: 现在,回到您的问题:做什么?简而言之:它输出模块文

  • 问题内容: 我想从bash脚本执行python脚本,并且要将python脚本的输出存储在变量中。 在我的python脚本中,我将一些内容打印到屏幕上,最后我返回一个带有以下内容的字符串: 在我的bash脚本中,我执行了以下操作: 但是,当我检查with的值时,我得到了Python脚本打印到屏幕上的所有内容,但 没有 返回值! 我应该怎么做? 编辑:我需要该字符串,因为它告诉我Python脚本创建的