Udostępnij za pośrednictwem


Powiązanie wyjściowe usługi Azure Database for MySQL dla usługi Azure Functions

Do zapisu w bazie danych można użyć powiązania wyjściowego usługi Azure Database for MySQL.

Aby uzyskać informacje na temat konfiguracji i konfiguracji, zobacz omówienie.

Ważne

W tym artykule są używane karty do obsługi wielu wersji modelu programowania Node.js. Model w wersji 4 jest ogólnie dostępny i ma bardziej elastyczne i intuicyjne środowisko dla deweloperów języka JavaScript i Języka TypeScript. Aby uzyskać więcej informacji na temat sposobu działania modelu w wersji 4, zapoznaj się z przewodnikiem dewelopera dotyczącym usługi Azure Functions Node.js. Aby dowiedzieć się więcej o różnicach między wersjami 3 i v4, zapoznaj się z przewodnikiem migracji.

Przykłady

Funkcję języka C# można utworzyć przy użyciu jednego z następujących trybów języka C#:

  • Model izolowanego procesu roboczego: skompilowana funkcja języka C#, która jest uruchamiana w procesie roboczym izolowanym od środowiska uruchomieniowego. Proces izolowanego procesu roboczego jest wymagany do obsługi funkcji języka C# działających w długoterminowych wersjach pomocy technicznej (LTS) i innych niż LTS dla platformy .NET i programu .NET Framework.
  • Model przetwarzania: skompilowana funkcja języka C#, która działa w tym samym procesie co środowisko uruchomieniowe usługi Azure Functions.
  • Skrypt języka C#: używany głównie podczas tworzenia funkcji języka C# w witrynie Azure Portal.

Ważne

Wsparcie zostanie zakończone dla modelu procesu 10 listopada 2026 r. Zdecydowanie zalecamy przeprowadzenie migracji aplikacji do izolowanego modelu procesu roboczego w celu uzyskania pełnej obsługi.

Więcej przykładów dla powiązania wyjściowego usługi Azure Database for MySQL jest dostępnych w repozytorium GitHub.

Ta sekcja zawiera następujący przykład:

W przykładzie Product odwołuje się do klasy i odpowiedniej tabeli bazy danych:

namespace AzureMySqlSamples.Common
{
    public class Product
    {
        public int? ProductId { get; set; }

        public string Name { get; set; }

        public int Cost { get; set; }

        public override bool Equals(object obj)
    }
}
DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Wyzwalacz HTTP, zapis jednego rekordu

W poniższym przykładzie pokazano funkcję języka C# , która dodaje rekord do bazy danych przy użyciu danych podanych w żądaniu HTTP POST jako treści JSON.

using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.MySql;
using Microsoft.Azure.Functions.Worker.Http;
using AzureMySqlSamples.Common;

namespace AzureMySqlSamples.OutputBindingSamples
{
    public static class AddProduct
    {
        [FunctionName(nameof(AddProduct))]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "addproduct")]
            [FromBody] Product prod,
            [MySql("Products", "MySqlConnectionString")] out Product product)
        {
            product = prod;
            return new CreatedResult($"/api/addproduct", product);
        }
    }
}

Więcej przykładów dla powiązania wyjściowego usługi Azure Database for MySQL jest dostępnych w repozytorium GitHub.

Ta sekcja zawiera następujący przykład:

W przykładzie Product odwołuje się do klasy i odpowiedniej tabeli bazy danych:

package com.function.Common;

import com.fasterxml.jackson.annotation.JsonProperty;

public class Product {
    @JsonProperty("ProductId")
    private int ProductId;
    @JsonProperty("Name")
    private String Name;
    @JsonProperty("Cost")
    private int Cost;

    public Product() {
    }

    public Product(int productId, String name, int cost) {
        ProductId = productId;
        Name = name;
        Cost = cost;
    }
}
DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Wyzwalacz HTTP, zapisywanie rekordu w tabeli

W poniższym przykładzie pokazano powiązanie danych wyjściowych usługi Azure Database for MySQL w funkcji Języka Java, która dodaje rekord do tabeli przy użyciu danych podanych w żądaniu HTTP POST jako treści JSON. Funkcja przyjmuje dodatkową zależność od biblioteki com.google.code.gson , aby przeanalizować treść JSON.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>
package com.function;

import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.OutputBinding;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.mysql.annotation.MySqlOutput;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.function.Common.Product;

import java.io.IOException;
import java.util.Optional;

public class AddProduct {
    @FunctionName("AddProduct")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.POST},
                authLevel = AuthorizationLevel.ANONYMOUS,
                route = "addproduct")
                HttpRequestMessage<Optional<String>> request,
            @MySqlOutput(
                name = "product",
                commandText = "Products",
                connectionStringSetting = "MySqlConnectionString")
                OutputBinding<Product> product) throws JsonParseException, JsonMappingException, IOException {

        String json = request.getBody().get();
        ObjectMapper mapper = new ObjectMapper();
        Product p = mapper.readValue(json, Product.class);
        product.setValue(p);

        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(product).build();
    }
}

Więcej przykładów dla powiązania wyjściowego usługi Azure Database for MySQL jest dostępnych w repozytorium GitHub.

Ta sekcja zawiera następujący przykład:

W przykładzie odwołuje się do tabeli bazy danych:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Wyzwalacz HTTP, zapisywanie rekordów w tabeli

Poniższy przykład przedstawia powiązanie wyjściowe usługi Azure Database for MySQL, które dodaje rekordy do tabeli przy użyciu danych podanych w żądaniu HTTP POST jako treści JSON.

const { app, output } = require('@azure/functions');

const mysqlOutput = output.generic({
    type: 'mysql',
    commandText: 'Products',
    connectionStringSetting: 'MySqlConnectionString'
})

// Upsert the product, which will insert it into the Products table if the primary key (ProductId) for that item doesn't exist.
// If it does, update it to have the new name and cost.
app.http('AddProduct', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [mysqlOutput],
    handler: async (request, context) => {
        // Note that this expects the body to be a JSON object or array of objects that have a property
        // matching each of the columns in the table to upsert to.
        const product = await request.json();
        context.extraOutputs.set(mysqlOutput, product);

        return {
            status: 201,
            body: JSON.stringify(product)
        };
    }
});
const { app, output } = require('@azure/functions');

const mysqlOutput = output.generic({
    type: 'mysql',
    commandText: 'Products',
    connectionStringSetting: 'MySqlConnectionString'
})

// Upsert the product, which will insert it into the Products table if the primary key (ProductId) for that item doesn't exist.
// If it does, update it to have the new name and cost.
app.http('AddProduct', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [mysqlOutput],
    handler: async (request, context) => {
        // Note that this expects the body to be a JSON object or array of objects that have a property
        // matching each of the columns in the table to upsert to.
        const product = await request.json();
        context.extraOutputs.set(mysqlOutput, product);

        return {
            status: 201,
            body: JSON.stringify(product)
        };
    }
});

Więcej przykładów dla powiązania wyjściowego usługi Azure Database for MySQL jest dostępnych w repozytorium GitHub.

Ta sekcja zawiera następujący przykład:

W przykładzie odwołuje się do tabeli bazy danych:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Wyzwalacz HTTP, zapisywanie rekordów w tabeli

W poniższym przykładzie przedstawiono powiązanie wyjściowe usługi Azure Database for MySQL w pliku function.json i funkcję programu PowerShell, która dodaje rekordy do tabeli przy użyciu danych podanych w żądaniu HTTP POST jako treści JSON.

W poniższym przykładzie przedstawiono powiązanie danych w pliku function.json:

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "Request",
      "direction": "in",
      "type": "httpTrigger",
      "methods": [
        "post"
      ],
      "route": "addproduct"
    },
    {
      "name": "response",
      "type": "http",
      "direction": "out"
    },
    {
      "name": "product",
      "type": "mysql",
      "direction": "out",
      "commandText": "Products",
      "connectionStringSetting": "MySqlConnectionString"
    }
  ],
  "disabled": false
}

W sekcji Konfiguracja opisano te właściwości.

Poniższy przykład to przykładowy kod programu PowerShell dla funkcji w pliku run.ps1:

using namespace System.Net

# Trigger binding data passed in via parameter block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell function with MySql Output Binding processed a request."

# Note that this expects the body to be a JSON object or array of objects 
# that have a property matching each of the columns in the table to upsert to.
$req_body = $Request.Body

# Assign the value that you want to pass to the MySQL output binding. 
# The -Name value corresponds to the name property in the function.json file for the binding.
Push-OutputBinding -Name product -Value $req_body

# Assign the value to return as the HTTP response. 
# The -Name value matches the name property in the function.json file for the binding.
Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

Więcej przykładów dla powiązania wyjściowego usługi Azure Database for MySQL jest dostępnych w repozytorium GitHub.

Ta sekcja zawiera następujący przykład:

W przykładzie odwołuje się do tabeli bazy danych:

DROP TABLE IF EXISTS Products;

CREATE TABLE Products (
  ProductId int PRIMARY KEY,
  Name varchar(100) NULL,
  Cost int NULL
);

Uwaga

Musisz użyć usługi Azure Functions w wersji 1.22.0b4 dla języka Python.

Wyzwalacz HTTP, zapisywanie rekordów w tabeli

W poniższym przykładzie przedstawiono powiązanie wyjściowe usługi Azure Database for MySQL w pliku function.json i funkcję języka Python, która dodaje rekordy do tabeli przy użyciu danych podanych w żądaniu HTTP POST jako treści JSON.

Poniższy przykład to przykładowy kod języka Python dla pliku function_app.py:

import json 

import azure.functions as func

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.generic_trigger(arg_name="req", type="httpTrigger", route="addproduct")
@app.generic_output_binding(arg_name="$return", type="http")
@app.generic_output_binding(arg_name="r", type="mysql",
                            command_text="Products",
                            connection_string_setting="MySqlConnectionString")
def mysql_output(req: func.HttpRequest, r: func.Out[func.MySqlRow]) \
        -> func.HttpResponse:
    body = json.loads(req.get_body())
    row = func.MySqlRow.from_dict(body)
    r.set(row)

    return func.HttpResponse(
        body=req.get_body(),
        status_code=201,
        mimetype="application/json"
    )

Atrybuty

Biblioteka języka C# używa atrybutu MySqlAttribute do deklarowania powiązań MySQL w funkcji, która ma następujące właściwości:

Właściwość atrybutu opis
CommandText Wymagany. Nazwa tabeli zapisywanej przez powiązanie.
ConnectionStringSetting Wymagany. Nazwa ustawienia aplikacji zawierającego parametry połączenia dla bazy danych, do której są zapisywane dane. Ta wartość nie jest rzeczywistymi parametrami połączenia i zamiast tego musi zostać rozpoznana jako zmienna środowiskowa.

Adnotacje

dla parametrów, których wartość pochodzi z usługi Azure Database for MySQL. Ta adnotacja obsługuje następujące elementy:

Składnik opis
commandText Wymagany. Nazwa tabeli zapisywanej przez powiązanie.
connectionStringSetting Wymagany. Nazwa ustawienia aplikacji zawierającego parametry połączenia dla bazy danych, do której są zapisywane dane. Ta wartość nie jest rzeczywistymi parametrami połączenia i zamiast tego musi zostać rozpoznana jako zmienna środowiskowa.
name Wymagany. Unikatowa nazwa powiązania funkcji.

Konfigurowanie

W poniższej tabeli opisano właściwości, które można ustawić dla options obiektu przekazanego output.generic() do metody :

Właściwości opis
commandText Wymagany. Nazwa tabeli zapisywanej przez powiązanie.
connectionStringSetting Wymagany. Nazwa ustawienia aplikacji zawierającego parametry połączenia dla bazy danych, do której są zapisywane dane. Ta wartość nie jest rzeczywistymi parametrami połączenia i zamiast tego musi zostać rozpoznana jako zmienna środowiskowa.

Konfigurowanie

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json:

Właściwości opis
type Wymagany. Musi być ustawiona wartość Mysql.
direction Wymagany. Musi być ustawiona wartość out.
name Wymagany. Nazwa zmiennej reprezentującej jednostkę w kodzie funkcji.
commandText Wymagany. Nazwa tabeli zapisywanej przez powiązanie.
connectionStringSetting Wymagany. Nazwa ustawienia aplikacji zawierającego parametry połączenia dla bazy danych, do której są zapisywane dane. Ta wartość nie jest rzeczywistymi parametrami połączenia i zamiast tego musi zostać rozpoznana jako zmienna środowiskowa.

Podczas tworzenia aplikacji lokalnie dodaj ustawienia aplikacji w pliku local.settings.json w kolekcji Values .

Uwaga

Powiązanie danych wyjściowych obsługuje wszystkie znaki specjalne, w tym znak dolara ($), backtick ('), łącznik (-) i podkreślenie (_). Aby uzyskać więcej informacji, zobacz dokumentację społeczności mySQL.

Język programowania może definiować atrybuty składowe zawierające znaki specjalne, które obsługuje. Na przykład język C# ma kilka ograniczeń dotyczących definiowania zmiennych.

W przeciwnym razie można użyć JObject powiązania wyjściowego, które obejmuje wszystkie znaki specjalne. Możesz postępować zgodnie ze szczegółowym przykładem w witrynie GitHub.

Użycie

Właściwość CommandText to nazwa tabeli, w której są przechowywane dane. Nazwa ustawienia parametrów połączenia odpowiada ustawieniu aplikacji zawierającemu parametry połączenia z usługą Azure Database for MySQL.

Jeśli wystąpi wyjątek podczas wykonywania powiązania wejściowego mySQL, kod funkcji nie zostanie uruchomiony. Wynikiem może być kod błędu, taki jak wyzwalacz HTTP, który zwraca kod błędu 500.