Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python上使用Azure函数的雪花外部函数不起作用_Python_Sql_Azure Functions_Snowflake Cloud Data Platform - Fatal编程技术网

在Python上使用Azure函数的雪花外部函数不起作用

在Python上使用Azure函数的雪花外部函数不起作用,python,sql,azure-functions,snowflake-cloud-data-platform,Python,Sql,Azure Functions,Snowflake Cloud Data Platform,我想创建一个外部函数,用于将行向上插入MongoDB。我已经创建了该函数,并在发布后使用Postman在本地对其进行了测试。首先,我使用了他们提出的javascript函数进行测试和工作。然而,当我运行python时,我得到了一个错误。这是代码 import logging import azure.functions as func import pymongo import json import os from datetime import datetime cluster = py

我想创建一个外部函数,用于将行向上插入MongoDB。我已经创建了该函数,并在发布后使用Postman在本地对其进行了测试。首先,我使用了他们提出的javascript函数进行测试和工作。然而,当我运行python时,我得到了一个错误。这是代码

import logging

import azure.functions as func
import pymongo
import json
import os
from datetime import datetime

cluster = pymongo.MongoClient(os.environ['MongoDBConnString'])
db = cluster[f"{os.environ['MongoDB']}"]
collection = db[f"{os.environ['MongoDBCollection']}"]

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:
        collection.update_one(
                filter={
                    '_id':req_body['_id']
                },
                update={
                    '$set': {'segment_ids': req_body['segment_ids']}
                },
                upsert=True)
        return func.HttpResponse(
                json.dumps({"status_code": 200,
                "status_message": "Upsert Success",
                "Timestamp": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S"),
                "_id": req_body['_id']}),
                status_code=200,
                mimetype="text/plain"
        )
该错误表示在定义之前引用了
req\u body
,在第
“id”:req\u body[“id”]
行失败。在Snowflake中,我创建了一个名为
mongoUpsert(body variant)
的外部函数,我正在解析一个简单的查询以进行测试

选择mongoUpsert(对象构造(“id”、“someuuid”、“段id”、“数组构造(1,2,3,4)))


据我所知,由于某种原因,函数没有接收我正在雪花中解析的
主体。我不知道我做错了什么。有人能帮我吗?还有人能解释一下Snowflake是如何发送参数(如body、params、header)的吗?有没有办法指定我是要解析body还是params?

我从头开始,在Snowflake中一层一层地剥离。因此雪花参数被解析到函数体中,但被包装在一个数组中,然后被包装在另一个名为
'data'
的对象中。此外,它期望返回与响应相同的模式。下面是使用Python时用于Azure函数的模板

import logging
import azure.functions as func
import json

def main(req: func.HttpRequest) -> func.HttpResponse:
    # Get body response from Snowflake
    req_body = req.get_json()['data'][0][1]

    ###### Do Something
    
    # Return Response
    message = {"Task": "Completed"}
    return func.HttpResponse(
        json.dumps({'data': [[0, message]]}),
        status_code=200)
例如,我使用了一个简单的JSON对象:

{
  "_id": "someuuid"
}
并在Snowflake中创建了一个名为
testfunc(body variant)
的外部函数,并使用
selecttestfunc(object\u-construct('u-id','someuuid'))调用它。
。 如果您要记录响应(使用
logging.info(req.get\u json())
),它将打印以下内容

{
  "data": 
  [
    [
      0,
      {
        "_id": "someuuid"
      }
    ]
  ]
}
所以为了得到干净的输入,我输入了雪花

req_body = req.get_json()['data'][0][1]

然而,我不断地在响应中出错,直到我尝试只回显输入,并注意到它没有包装就返回了它。返回的正文需要是字符串(因此为什么要使用
json.dumps()
),但它也需要包装。因此,要打印出来,首先定义一条您想要的消息(可能是输入的计算或确认),然后将消息包装在
{'data':[[0,message]]}
中,最后将其编译为字符串(
json.dumps()

我从零开始,在雪花中一层一层地剥离。因此雪花参数被解析到函数体中,但被包装在一个数组中,然后被包装在另一个名为
'data'
的对象中。此外,它期望返回与响应相同的模式。下面是使用Python时用于Azure函数的模板

import logging
import azure.functions as func
import json

def main(req: func.HttpRequest) -> func.HttpResponse:
    # Get body response from Snowflake
    req_body = req.get_json()['data'][0][1]

    ###### Do Something
    
    # Return Response
    message = {"Task": "Completed"}
    return func.HttpResponse(
        json.dumps({'data': [[0, message]]}),
        status_code=200)
例如,我使用了一个简单的JSON对象:

{
  "_id": "someuuid"
}
并在Snowflake中创建了一个名为
testfunc(body variant)
的外部函数,并使用
selecttestfunc(object\u-construct('u-id','someuuid'))调用它。
。 如果您要记录响应(使用
logging.info(req.get\u json())
),它将打印以下内容

{
  "data": 
  [
    [
      0,
      {
        "_id": "someuuid"
      }
    ]
  ]
}
所以为了得到干净的输入,我输入了雪花

req_body = req.get_json()['data'][0][1]

然而,我不断地在响应中出错,直到我尝试只回显输入,并注意到它没有包装就返回了它。返回的正文需要是字符串(因此为什么要使用
json.dumps()
),但它也需要包装。因此,要打印出来,首先定义一条您想要的消息(可能是输入的计算或确认),然后将消息包装在
{'data':[[0,message]]}
中,最后将其编译为字符串(
json.dumps()

外部函数以特定格式发送和接收数据。所有参数都在请求正文中发送

你可以结账 对于外部函数示例


有一个专门用于调用Translator API的函数。

外部函数以特定格式发送和接收数据。所有参数都在请求正文中发送

你可以结账 对于外部函数示例

有一个专门用于调用Translator API的