Связывание ввода из блоба Azure в приложении функций с использованием python - PullRequest
1 голос
/ 18 февраля 2020

У меня есть CSV-файл в azure хранилище больших двоичных объектов, которое я хотел бы открыть и получить определенные данные на основе пользовательского ввода. У меня две проблемы:

1) Пустое значение AzureWebJobsStorage в local.settings. json

Я попытался ввести привязку с помощью AzureWebJobsStorage , но значение кажется пустым. Я не уверен, как я могу, какое значение я должен изменить в local.settings. json. Следовательно, получая эту ошибку:

Выполнено 'Functions.HttpExample' (Failed, Id = 3a9309d6-7019-4de6-a8d2-43c89921b0f6) [18-Feb-20 9:40:36 AM] Система .Private.CoreLib: Исключительная ситуация при выполнении функции: Functions.HttpExample. Microsoft. Azure .WebJobs.Host: значение не может быть нулевым. [18-Feb-20 9:40:36 AM] Имя параметра: connectionString.

Я обновил значение с помощью строки подключения моей учетной записи хранения. Он все еще не работал.

функция. json:

{
  "type": "blob",
  "direction": "in",
  "name": "container_name",
  "path": "blob_name/file_name.csv",
  "connection": "AzureWebJobsStorage"
}

Использую ли я правильные имена переменных выше? Как я также получил другую ошибку:

Указанный BLOB-объект не существует.

Но BLOB-объект существует в хранилище.

2) Как сделать Я отображаю все данные внутри csv из этого (при условии, что вышеуказанная проблема решена)

Это мой текущий код в __init__.py:

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

    section = req.params.get('section')
    bound = req.params.get('bound')
    km_location = req.params.get('km_location')
    location = req.params.get('location')
    if not section:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            section = req_body.get('section')

    if section and bound and km_location:
        #pass the following user input to the following function and use them to retrieve remaining info
        #from csv (stored in blob) to user.
        result(section, km_location, bound, location).getResult() 

        return func.HttpResponse(f"Hello {section}, {bound}!")

1 Ответ

0 голосов
/ 19 февраля 2020

Об определении свойства в function.json можно сослаться на это: c: configuration .

name - это переменная, представляющая BLOB-объект в коде функции. Это должно быть то же самое в коде функции, и это может быть любая переменная, которую вы хотите.

Ниже приведен мой тест function.json, вы также можете обратиться к примеру в предоставленной мной ссылке.

{
      "name": "inputBlob",
      "type": "blob",
      "path": "test/test.csv",
      "connection": "AzureWebJobsStorage",
      "direction": "in"
    }

А о том, как читать CSV-файл, вы можете обратиться к моему коду функции.

import logging
import azure.functions as func
import csv
import codecs


def main(req: func.HttpRequest,inputBlob: func.InputStream) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    reader=csv.reader(codecs.iterdecode(inputBlob,'utf-8'))
    for line in reader:
        logging.info(line)

    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}!")
    else:
        return func.HttpResponse(
             "Please pass a name on the query string or in the request body",
             status_code=400
        )

Вот мой результат теста, надеюсь, это поможет вам, если у вас все еще есть другие проблемы, пожалуйста, не стесняйтесь дайте мне знать.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...