gpt4 book ai didi

python - 如何使用 Python 中 Azure Functions 的 Azure Blob 存储绑定(bind)将 JSON 数据上传到 Azure 存储 Blob

转载 作者:行者123 更新时间:2023-12-02 08:32:58 24 4
gpt4 key购买 nike

我想使用 Python 中的 Azure Functions 将 JSON 数据作为 .json 文件上传到 Azure 存储 blob。

因为我使用的是 Azure Functions 而不是实际的服务器,所以我不想(也可能无法)在本地内存中创建临时文件并使用 Azure Blob 存储客户端库 v2.1 将该文件上传到 Azure Blob 存储对于Python( reference link here )。因此,我想使用 Azure Functions 的输出 blob 存储绑定(bind) ( reference link here )。

我正在使用 HTTP 触发器在 Azure Functions 中对此进行测试。我通过输入 blob 存储绑定(bind)接收 Azure blob(工作正常),对其进行处理,并通过上传覆盖它的新 Azure blob 来更新它(这是我需要帮助的)。我的 function.json 文件如下所示:

{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"name": "inputblob",
"type": "blob",
"path": "{containerName}/{blobName}.json",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
},
{
"name": "outputblob",
"type": "blob",
"path": "{containerName}/{blobName}.json",
"connection": "MyStorageConnectionAppSetting",
"direction": "out"
},
{
"type": "http",
"direction": "out",
"name": "$return"
}
]
}

我的 Python 代码如下所示:

import logging
import azure.functions as func
import azure.storage.blob
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
import json, os

def main(req: func.HttpRequest, inputblob: func.InputStream, outputblob: func.Out[func.InputStream]) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

# Initialize variable for tracking any changes
anyChanges= False

# Read JSON file
jsonData= json.loads(inputblob.read())

# Make changes to jsonData (omitted for simplicity) and update anyChanges

# Upload new JSON file
if anyChanges:
outputblob.set(jsonData)

return func.HttpResponse(f"Input data: {jsonData}. Any changes: {anyChanges}.")

但是,这根本不起作用,会引发以下错误 ( screenshot ):

Value 'func.Out' is unsubscriptable

我错过了什么?

最佳答案

您需要 bytesstr,而不是 InputStream,如下所示:

def main(inputblob: func.InputStream, outputblob: func.Out[bytes], context: func.Context):
...
# Write to output blob
outputblob.set(jsonData)

输入流 represents an input blob .

参见this sample对于 strthis one对于字节

稍后更新:

json.loads() 的调用返回一个字典,并且由于某种原因 outputblob.set() 出现异常,需要一些处理,如下所示:

def main(req: func.HttpRequest,
inputblob: func.InputStream,
outputblob: func.Out[bytes]) -> func.HttpResponse:

jsonData = json.loads(inputblob.read())
outputblob.set(str(jsonData))

return func.HttpResponse(f"Input JSON: {jsonData}")

这应该可以工作(它可以在 func 版本上工作至少2.7.1948)。

关于python - 如何使用 Python 中 Azure Functions 的 Azure Blob 存储绑定(bind)将 JSON 数据上传到 Azure 存储 Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59260913/

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