Python 3.x 来自Azure函数的动态Cosmos SQL查询

Python 3.x 来自Azure函数的动态Cosmos SQL查询,python-3.x,azure-functions,azure-cosmosdb,Python 3.x,Azure Functions,Azure Cosmosdb,我们有一个Cosmos DB,我们正试图使用http触发函数API使用不同的参数从中检索数据。 我知道cosmos输入绑定,但为此,我需要将SQL查询放在function.json文件中,如果查询中存在所有参数,这就可以了。 问题是,我希望根据不同的参数获取数据,并且可能不是所有这些参数都会被发送到每个查询。这个函数API是否具有足够的动态性,可以在运行时创建SQL查询并从Cosmos获取数据 我没有使用输入绑定,而是尝试使用Cosmos python SDK,但出现以下错误。“没有名为‘azu

我们有一个Cosmos DB,我们正试图使用http触发函数API使用不同的参数从中检索数据。 我知道cosmos输入绑定,但为此,我需要将SQL查询放在function.json文件中,如果查询中存在所有参数,这就可以了。 问题是,我希望根据不同的参数获取数据,并且可能不是所有这些参数都会被发送到每个查询。这个函数API是否具有足够的动态性,可以在运行时创建SQL查询并从Cosmos获取数据

我没有使用输入绑定,而是尝试使用Cosmos python SDK,但出现以下错误。“没有名为‘azure.cosmos’的模块。”

当我通常运行python程序访问cosmos外部函数时,它工作正常,这告诉我已经导入了必要的库。但当从python函数调用时,这是失败的。我已经检查过是否指向正确的解释器(Python3.8)

有什么我遗漏的吗?下面是我的代码:

{

}

下面是我收到的错误。 {

[2021-02-10T05:05:48.655Z]工作进程已启动并初始化。[2021-02-10T05:05:48.726Z]工作进程无法运行id 89f6dacb-3136-4a73-89f4-7525bdc69fe0。
[2021-02-10T05:05:49.388Z]结果:失败
异常:ModuleNotFoundError:没有名为“azure.cosmos”的模块。疑难解答指南:https://aka.ms/functions-modulenotfound
堆栈:文件“C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\Azure\u Functions\u worker\dispatcher.py”,第271行,在\u handle\u function\u load\u请求中
func=loader.load\u函数(
调用文件“C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\Azure\u Functions\u worker\utils\wrappers.py”第34行
引发扩展异常消息(e,消息)
文件“C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\Azure\u Functions\u worker\utils\wrappers.py”,第32行,在调用中
返回函数(*args,**kwargs)
文件“C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\Azure\u Functions\u worker\loader.py”,第76行,在load\u函数中
mod=importlib.import\u模块(fullmodname)
文件“C:\Users\dell\AppData\Local\Programs\Python\Python38\lib\importlib\\uuuuuu init\uuuuuu.py”,第127行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“D:\Visual Studio\Projects\Functions1\myhttp1\\uuuuu init\uuuuuuu.py”,第2行,在
从azure.cosmos导入异常、CosmosClient、PartitionKey
.
[2021-02-10T05:05:49.397Z]工作人员无法使用功能id dc05d956-83c3-44fd-9dfd-304c3f3db8ca。
[2021-02-10T05:05:49.398Z]结果:失败
异常:AttributeError:模块“azure.functions”在“中”没有属性
堆栈:文件“C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\Azure\u Functions\u worker\dispatcher.py”,第271行,在\u handle\u function\u load\u请求中
func=loader.load\u函数(
文件“C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\Azure\u Functions\u worker\utils\wrappers.py”,第32行,在调用中
返回函数(*args,**kwargs)
文件“C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\Azure\u Functions\u worker\loader.py”,第76行,在load\u函数中
mod=importlib.import\u模块(fullmodname)
文件“C:\Users\dell\AppData\Local\Programs\Python\Python38\lib\importlib\\uuuuuu init\uuuuuu.py”,第127行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第1014行,在\u gcd\u导入中
文件“”,第991行,在“查找”和“加载”中
文件“”,第961行,在“查找”和“加载”中解锁
文件“”,第219行,在“调用”中,删除了“帧”
文件“”,第1014行,在\u gcd\u导入中
文件“”,第991行,在“查找”和“加载”中
文件“”,第975行,在“查找”和“加载”中解锁
文件“”,第671行,在\u加载\u解锁
exec_模块中第783行的文件“”
文件“”,第219行,在“调用”中,删除了“帧”
文件“D:\Visual Studio\Projects\Functions1\SBTopicTrigger1\\uuuu init\uuuuu.py”,第5行,在
def main(消息:func.ServiceBusMessage,inputdocument:func.In[func.Document],outputSbMsg:func.ServiceBusMessage):
}

我们有一个Cosmos数据库,我们正试图使用它来检索数据 使用http触发函数API的不同参数。我知道 cosmos输入绑定,但为此,我需要在 json文件,如果所有参数都是 查询中存在。问题是,我希望基于 在不同的参数上,可能不是所有这些 将为每个查询发送参数。是否有方法实现此功能 API的动态性足以在运行时创建SQL查询并获取 来自宇宙的数据

绑定可以实现的动态相对有限。如果传入json,可以在绑定定义中获取传递的json数据的键值(从某种意义上说,这被认为是动态的)。但是,建议使用cosmosdb SDK来实现动态

我没有使用输入绑定,而是尝试使用Cosmos python SDK,但收到以下错误。“没有名为'azure.cosmos'的模块”

当我在外面运行python程序访问cosmos时 功能,这是工作良好,这告诉我,我有必要的 库已导入。但从调用时失败 python函数。我已经检查过我是否指向 正确的解释器(python 3.8)

我可以复制,这是您的错误(在使用公共python脚本时,我也可以毫无问题地导入):

我认为问题来自您在虚拟环境中运行,并且您已经激活了它

因此,有两种方式:

不要激活虚拟环境,请使用命令“func host start”启动您的功能(这将从全局环境开始)

import logging
from azure.cosmos import exceptions, CosmosClient, PartitionKey
import azure.functions as func


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:
        endpoint = "https://anucosmos123.documents.azure.com:443/"
        key = 'kbN3EzLfxVYUDg4dRG0gtyehgnrD2kM410jyzfUIK1N8dl11tmVkZcig9PKNmccJR89jHdYIeHKnjH7JnMYo6Q=='
        client = CosmosClient(endpoint, key)
        database_name = 'mydb'
        database = client.create_database_if_not_exists(id=database_name)
        container_name= 'mycoll'
        container = database.create_container_if_not_exists(id=container_name,partition_key=PartitionKey(path="/name"),
            offer_throughput=400)

        query = 'SELECT * FROM c WHERE c.name = "Anupam"'
        items = list(container.query_items(query=query, enable_cross_partition_query=True))
        print(items)
        return func.HttpResponse(items, status_code=200)
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )
[2021-02-10T05:05:48.655Z] Worker process started and initialized.[2021-02-10T05:05:48.726Z] Worker failed to function id 89f6dacb-3136-4a73-89f4-7525bdc69fe0.

[2021-02-10T05:05:49.388Z] Result: Failure
Exception: ModuleNotFoundError: No module named 'azure.cosmos'. Troubleshooting Guide: https://aka.ms/functions-modulenotfound
Stack:   File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\dispatcher.py", line 271, in _handle__function_load_request
    func = loader.load_function(
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\utils\wrappers.py", line 34, in call
    raise extend_exception_message(e, message)
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\utils\wrappers.py", line 32, in call
    return func(*args, **kwargs)
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\loader.py", line 76, in load_function
    mod = importlib.import_module(fullmodname)
  File "C:\Users\dell\AppData\Local\Programs\Python\Python38\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "D:\Visual Studio\Projects\Functions1\myhttp1\__init__.py", line 2, in <module>
    from azure.cosmos import exceptions, CosmosClient, PartitionKey
.
[2021-02-10T05:05:49.397Z] Worker failed to function id dc05d956-83c3-44fd-9dfd-304c3f3db8ca.
[2021-02-10T05:05:49.398Z] Result: Failure
Exception: AttributeError: module 'azure.functions' has no attribute 'In'
Stack:   File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\dispatcher.py", line 271, in _handle__function_load_request
    func = loader.load_function(
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\utils\wrappers.py", line 32, in call
    return func(*args, **kwargs)
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\loader.py", line 76, in load_function
    mod = importlib.import_module(fullmodname)
  File "C:\Users\dell\AppData\Local\Programs\Python\Python38\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "D:\Visual Studio\Projects\Functions1\SBTopicTrigger1\__init__.py", line 5, in <module>
    def main(message: func.ServiceBusMessage, inputdocument: func.In[func.Document], outputSbMsg:func.ServiceBusMessage):
azure-functions
azure.cosmos
{[2021-02-10T06:34:16.248Z] Worker failed to function id 4af477f8-eff0-4937-b87f-98f7828d95ec.
[2021-02-10T06:34:16.250Z] Result: Failure
Exception: AttributeError: module 'azure.functions' has no attribute 'In'
Stack:   File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\dispatcher.py", line 271, in _handle__function_load_request
    func = loader.load_function(
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\utils\wrappers.py", line 32, in call
    return func(*args, **kwargs)
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.8/WINDOWS/X64\azure_functions_worker\loader.py", line 76, in load_function
    mod = importlib.import_module(fullmodname)
  File "C:\Users\dell\AppData\Local\Programs\Python\Python38\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "D:\Visual Studio\Projects\Functions1\SBTopicTrigger1\__init__.py", line 5, in <module>
    def main(message: func.ServiceBusMessage, inputdocument: func.In[func.Document], outputSbMsg:func.ServiceBusMessage):
.}