Azure Database for MySQL-utdatabindning för Azure Functions

Du kan använda Azure Database for MySQL-utdatabindningen för att skriva till en databas.

Information om installation och konfiguration finns i översikten.

Viktigt!

Den här artikeln använder flikar för att stödja flera versioner av Node.js programmeringsmodellen. V4-modellen är allmänt tillgänglig och är utformad för att ha en mer flexibel och intuitiv upplevelse för JavaScript- och TypeScript-utvecklare. Mer information om hur v4-modellen fungerar finns i utvecklarguiden för Azure Functions Node.js. Mer information om skillnaderna mellan v3 och v4 finns i migreringsguiden.

Exempel

Du kan skapa en C#-funktion med något av följande C#-lägen:

  • Isolerad arbetsmodell: Kompilerad C#-funktion som körs i en arbetsprocess som är isolerad från körningen. En isolerad arbetsprocess krävs för att stödja C#-funktioner som körs på långsiktig support (LTS) och icke-LTS-versioner för .NET och .NET Framework.
  • Processmodell: Kompilerad C#-funktion som körs i samma process som Azure Functions-körningen.
  • C#-skript: Används främst när du skapar C#-funktioner i Azure Portal.

Fler exempel för Azure Database for MySQL-utdatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplet refererar till en Product klass och en motsvarande databastabell:

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
);

HTTP-utlösare, skriv en post

I följande exempel visas en C#-funktion som lägger till en post i en databas med hjälp av data som anges i en HTTP-begäran som en JSON-brödtext POST .

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);
        }
    }
}

Fler exempel för Azure Database for MySQL-utdatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplet refererar till en Product klass och en motsvarande databastabell:

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
);

HTTP-utlösare, skriva en post till en tabell

I följande exempel visas en Azure Database for MySQL-utdatabindning i en Java-funktion som lägger till en post i en tabell med hjälp av data som anges i en HTTP-begäran som en JSON-brödtext POST . Funktionen tar ytterligare ett beroende av com.google.code.gson-biblioteket för att parsa JSON-brödtexten.

<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();
    }
}

Fler exempel för Azure Database for MySQL-utdatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplet refererar till en databastabell:

DROP TABLE IF EXISTS Products;

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

HTTP-utlösare, skriva poster till en tabell

I följande exempel visas en Azure Database for MySQL-utdatabindning som lägger till poster i en tabell med hjälp av data som anges i en HTTP-begäran som en JSON-brödtext POST .

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)
        };
    }
});

Fler exempel för Azure Database for MySQL-utdatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplet refererar till en databastabell:

DROP TABLE IF EXISTS Products;

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

HTTP-utlösare, skriva poster till en tabell

I följande exempel visas en Azure Database for MySQL-utdatabindning i en function.json-fil och en PowerShell-funktion som lägger till poster i en tabell med hjälp av data som anges i en HTTP-begäran som en JSON-brödtext POST .

Följande exempel är bindningsdata i filen 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
}

I avsnittet Konfiguration beskrivs dessa egenskaper.

Följande exempel är PowerShell-exempelkod för funktionen i filen 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
})

Fler exempel för Azure Database for MySQL-utdatabindningen finns på GitHub-lagringsplatsen.

Det här avsnittet innehåller följande exempel:

Exemplet refererar till en databastabell:

DROP TABLE IF EXISTS Products;

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

Kommentar

Du måste använda Azure Functions version 1.22.0b4 för Python.

HTTP-utlösare, skriva poster till en tabell

I följande exempel visas en Azure Database for MySQL-utdatabindning i en function.json-fil och en Python-funktion som lägger till poster i en tabell med hjälp av data som tillhandahålls i en HTTP-begäran som en JSON-brödtext POST .

Följande exempel är Python-exempelkod för function_app.py-filen:

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"
    )

Attribut

C#-biblioteket använder MySqlAttribute attributet för att deklarera MySQL-bindningar för funktionen, som har följande egenskaper:

Attributegenskap beskrivning
CommandText Obligatoriskt. Namnet på tabellen som bindningen skriver till.
ConnectionStringSetting Obligatoriskt. Namnet på en appinställning som innehåller anslutningssträngen för databasen som data skrivs till. Det här värdet är inte den faktiska anslutningssträngen och måste i stället matchas mot en miljövariabel.

Kommentarer

I Java Functions-körningsbiblioteket använder du anteckningen @MySQLOutput för parametrar vars värde skulle komma från Azure Database for MySQL. Den här kommentaren stöder följande element:

Komponent beskrivning
commandText Obligatoriskt. Namnet på tabellen som bindningen skriver till.
connectionStringSetting Obligatoriskt. Namnet på en appinställning som innehåller anslutningssträngen för databasen som data skrivs till. Det här värdet är inte den faktiska anslutningssträngen och måste i stället matchas mot en miljövariabel.
name Obligatoriskt. Funktionsbindningens unika namn.

Konfiguration

I följande tabell förklaras de egenskaper som du kan ange för objektet options som skickas output.generic() till metoden:

Fastighet beskrivning
commandText Obligatoriskt. Namnet på tabellen som bindningen skriver till.
connectionStringSetting Obligatoriskt. Namnet på en appinställning som innehåller anslutningssträngen för databasen som data skrivs till. Det här värdet är inte den faktiska anslutningssträngen och måste i stället matchas mot en miljövariabel.

Konfiguration

I följande tabell förklaras de bindningskonfigurationsegenskaper som du anger i function.json-filen:

Fastighet beskrivning
type Obligatoriskt. Måste anges till Mysql.
direction Obligatoriskt. Måste anges till out.
name Obligatoriskt. Namnet på variabeln som representerar entiteten i funktionskoden.
commandText Obligatoriskt. Namnet på tabellen som bindningen skriver till.
connectionStringSetting Obligatoriskt. Namnet på en appinställning som innehåller anslutningssträngen för databasen som data skrivs till. Det här värdet är inte den faktiska anslutningssträngen och måste i stället matchas mot en miljövariabel.

När du utvecklar lokalt lägger du till dina programinställningar i den local.settings.json filen i Values samlingen.

Kommentar

Utdatabindningen stöder alla specialtecken, inklusive dollartecken ($), backtick ('), bindestreck (-) och understreck (_). Mer information finns i dokumentationen om MySQL-communityn.

Ett programmeringsspråk kan definiera medlemsattribut som innehåller specialtecken som stöds. C# har till exempel några begränsningar för att definiera variabler.

Annars kan du använda JObject för utdatabindningen som omfattar alla specialtecken. Du kan följa ett detaljerat exempel på GitHub.

Förbrukning

Egenskapen CommandText är namnet på tabellen där data lagras. Namnet på inställningen för anslutningssträngen motsvarar programinställningen som innehåller anslutningssträngen till Azure Database for MySQL.

Om ett undantag inträffar när en MySQL-indatabindning körs körs inte funktionskoden. Resultatet kan vara en felkod, till exempel en HTTP-utlösare som returnerar en 500-felkod.