gpt4 book ai didi

python - 如何使用 Azure 函数中的 pymongo 连接到 Cosmos DB

转载 作者:行者123 更新时间:2023-12-03 02:42:06 26 4
gpt4 key购买 nike

我想创建一个带有 HTTP 触发器的 Azure 函数,然后使用 pymongo 与 Cosmos DB 数据库交互。当我在本地计算机上运行它时,它工作正常,但从 azure 运行时失败。我猜我需要授予 cosmos db 对函数应用程序的访问权限,但我不知道该怎么做。

import logging

import azure.functions as func

import pymongo

def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')

if name:
return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
else:
uri = "uri provided by cosmos"
client = pymongo.MongoClient(uri)

db = client.test
collection = db.test
o = collection.find_one()
return func.HttpResponse(
f"name is {o['name']}",
status_code=200
)

这是错误

Exception while executing function: Functions.ycwn Result: Failure
Exception: ServerSelectionTimeoutError: connection closed
Stack: File "/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", line 315, in _handle__invocation_request
self.__run_sync_func, invocation_id, fi.func, args)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/azure-functions-host/workers/python/3.7/LINUX/X64/azure_functions_worker/dispatcher.py", line 434, in __run_sync_func
return func(**params)
File "/home/site/wwwroot/ycwn/__init__.py", line 27, in main
o = collection.find_one()
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/collection.py", line 1273, in find_one
for result in cursor.limit(-1):
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/cursor.py", line 1156, in next
if len(self.__data) or self._refresh():
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/cursor.py", line 1050, in _refresh
self.__session = self.__collection.database.client._ensure_session()
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/mongo_client.py", line 1810, in _ensure_session
return self.__start_session(True, causal_consistency=False)
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/mongo_client.py", line 1763, in __start_session
server_session = self._get_server_session()
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/mongo_client.py", line 1796, in _get_server_session
return self._topology.get_server_session()
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/topology.py", line 490, in get_server_session
None)
File "/home/site/wwwroot/.python_packages/lib/site-packages/pymongo/topology.py", line 209, in _select_servers_loop
self._error_message(selector))

最佳答案

明白了这一点。我需要选中“允许来自公共(public) Azure 数据中心内的连接”。

cosmosdb setting

关于python - 如何使用 Azure 函数中的 pymongo 连接到 Cosmos DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60612755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com