Sdílet prostřednictvím


Vstupní vazba Azure SQL pro Azure Functions

Při spuštění funkce vstupní vazba Azure SQL načte data z databáze a předá ji vstupnímu parametru funkce.

Informace o nastavení a konfiguraci najdete v přehledu.

Důležité

Tento článek používá karty pro podporu více verzí programovacího modelu Node.js. Model v4 je obecně dostupný a je navržený tak, aby měl flexibilnější a intuitivnější prostředí pro vývojáře v JavaScriptu a TypeScriptu. Další podrobnosti o tom, jak model v4 funguje, najdete v příručce pro vývojáře služby Azure Functions Node.js. Další informace o rozdílech mezi v3 a v4 najdete v průvodci migrací.

Příklady

Funkci jazyka C# je možné vytvořit pomocí jednoho z následujících režimů jazyka C#:

  • Izolovaný model pracovního procesu: Kompilovaná funkce jazyka C#, která běží v pracovním procesu, který je izolovaný od modulu runtime. Izolovaný pracovní proces je nutný pro podporu funkcí C# spuštěných na LTS a jiných verzích než LTS .NET a rozhraní .NET Framework.
  • Model v procesu: Zkompilovaná funkce jazyka C#, která běží ve stejném procesu jako modul runtime služby Functions.
  • Skript jazyka C#: Používá se především při vytváření funkcí jazyka C# na webu Azure Portal.

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na ToDoItem třídu a odpovídající tabulku databáze:

namespace AzureSQL.ToDo
{
    public class ToDoItem
    {
        public Guid Id { get; set; }
        public int? order { get; set; }
        public string title { get; set; }
        public string url { get; set; }
        public bool? completed { get; set; }
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje funkci jazyka C#, která načte jeden záznam. Funkce se aktivuje požadavkem HTTP, který k zadání ID používá řetězec dotazu. Toto ID se používá k načtení záznamu ToDoItem se zadaným dotazem.

Poznámka:

Parametr řetězce dotazu HTTP rozlišují malá a velká písmena.

using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;

namespace AzureSQLSamples
{
    public static class GetToDoItem
    {
        [FunctionName("GetToDoItem")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitem")]
            HttpRequest req,
            [SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
                commandType: System.Data.CommandType.Text,
                parameters: "@Id={Query.id}",
                connectionStringSetting: "SqlConnectionString")]
            IEnumerable<ToDoItem> toDoItem)
        {
            return new OkObjectResult(toDoItem.FirstOrDefault());
        }
    }
}

Trigger HTTP, získání více řádků z parametru trasy

Následující příklad ukazuje funkci jazyka C#, která načítá dokumenty vrácené dotazem. Funkce se aktivuje požadavkem HTTP, který používá směrovací data k určení hodnoty parametru dotazu. Tento parametr slouží k filtrování ToDoItem záznamů v zadaném dotazu.

using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;

namespace AzureSQLSamples
{
    public static class GetToDoItems
    {
        [FunctionName("GetToDoItems")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitems/{priority}")]
            HttpRequest req,
            [SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where [Priority] > @Priority",
                commandType: System.Data.CommandType.Text,
                parameters: "@Priority={priority}",
                connectionStringSetting: "SqlConnectionString")]
            IEnumerable<ToDoItem> toDoItems)
        {
            return new OkObjectResult(toDoItems);
        }
    }
}

Trigger HTTP, odstranění řádků

Následující příklad ukazuje funkci jazyka C#, která spouští uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi SQL. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
namespace AzureSQL.ToDo
{
    public static class DeleteToDo
    {
        // delete all items or a specific item from querystring
        // returns remaining items
        // uses input binding with a stored procedure DeleteToDo to delete items and return remaining items
        [FunctionName("DeleteToDo")]
        public static IActionResult Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "DeleteFunction")] HttpRequest req,
            ILogger log,
            [SqlInput(commandText: "DeleteToDo", commandType: System.Data.CommandType.StoredProcedure, 
                parameters: "@Id={Query.id}", connectionStringSetting: "SqlConnectionString")] 
                IEnumerable<ToDoItem> toDoItems)
        {
            return new OkObjectResult(toDoItems);
        }
    }
}

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na ToDoItem třídu (v samostatném souboru ToDoItem.java) a odpovídající tabulku databáze:

package com.function;
import java.util.UUID;

public class ToDoItem {
    public UUID Id;
    public int order;
    public String title;
    public String url;
    public boolean completed;

    public ToDoItem() {
    }

    public ToDoItem(UUID Id, int order, String title, String url, boolean completed) {
        this.Id = Id;
        this.order = order;
        this.title = title;
        this.url = url;
        this.completed = completed;
    }
}
CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL ve funkci Java, která je aktivována požadavkem HTTP a přečte z dotazu a vrátí výsledky v odpovědi HTTP.

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.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.sql.annotation.SQLInput;

import java.util.Optional;

public class GetToDoItems {
    @FunctionName("GetToDoItems")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            @SQLInput(
                name = "toDoItems",
                commandText = "SELECT * FROM dbo.ToDo",
                commandType = "Text",
                connectionStringSetting = "SqlConnectionString")
                ToDoItem[] toDoItems) {
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
    }
}

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL ve funkci Java, která je aktivována požadavkem HTTP a přečte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

public class GetToDoItem {
    @FunctionName("GetToDoItem")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            @SQLInput(
                name = "toDoItems",
                commandText = "SELECT * FROM dbo.ToDo",
                commandType = "Text",
                parameters = "@Id={Query.id}",
                connectionStringSetting = "SqlConnectionString")
                ToDoItem[] toDoItems) {
        ToDoItem toDoItem = toDoItems[0];
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItem).build();
    }
}

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL ve funkci Java aktivované požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
public class DeleteToDo {
    @FunctionName("DeleteToDo")
    public HttpResponseMessage run(
            @HttpTrigger(
                name = "req",
                methods = {HttpMethod.GET},
                authLevel = AuthorizationLevel.ANONYMOUS)
                HttpRequestMessage<Optional<String>> request,
            @SQLInput(
                name = "toDoItems",
                commandText = "dbo.DeleteToDo",
                commandType = "StoredProcedure",
                parameters = "@Id={Query.id}",
                connectionStringSetting = "SqlConnectionString")
                ToDoItem[] toDoItems) {
        return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
    }
}

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na tabulku databáze:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL aktivovanou požadavkem HTTP a načte z dotazu a vrací výsledky v odpovědi HTTP.

import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
    commandType: 'Text',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL input binding function processed a request.');
    const toDoItems = context.extraInputs.get(sqlInput);
    return {
        jsonBody: toDoItems,
    };
}

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
    commandType: 'Text',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: (request, context) => {
        context.log('HTTP trigger and SQL input binding function processed a request.');
        const toDoItems = context.extraInputs.get(sqlInput);
        return {
            jsonBody: toDoItems,
        };
    },
});

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL aktivovanou požadavkem HTTP a načte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
    commandType: 'Text',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL input binding function processed a request.');
    const toDoItem = context.extraInputs.get(sqlInput);
    return {
        jsonBody: toDoItem,
    };
}

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');

const sqlInput = input.sql({
    commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
    commandType: 'Text',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: (request, context) => {
        context.log('HTTP trigger and SQL input binding function processed a request.');
        const toDoItem = context.extraInputs.get(sqlInput);
        return {
            jsonBody: toDoItem,
        };
    },
});

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL aktivovanou požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';

const sqlInput = input.sql({
    commandText: 'DeleteToDo',
    commandType: 'StoredProcedure',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL input binding function processed a request.');
    const toDoItems = context.extraInputs.get(sqlInput);
    return {
        jsonBody: toDoItems,
    };
}

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');

const sqlInput = input.sql({
    commandText: 'DeleteToDo',
    commandType: 'StoredProcedure',
    parameters: '@Id={Query.id}',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['GET'],
    authLevel: 'anonymous',
    extraInputs: [sqlInput],
    handler: (request, context) => {
        context.log('HTTP trigger and SQL input binding function processed a request.');
        const toDoItems = context.extraInputs.get(sqlInput);
        return {
            jsonBody: toDoItems,
        };
    },
});

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na tabulku databáze:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci PowerShellu, která se aktivuje požadavkem HTTP a přečte z dotazu a vrátí výsledky v odpovědi HTTP.

V souboru function.json jsou svázná data:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "in",
    "commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo",
    "commandType": "Text",
    "connectionStringSetting": "SqlConnectionString"
}

Oddíl konfigurace vysvětluje tyto vlastnosti.

Následuje ukázkový kód PowerShellu pro funkci v run.ps1 souboru:

using namespace System.Net

param($Request, $todoItems)

Write-Host "PowerShell function with SQL Input Binding processed a request."

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $todoItems
})

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL ve funkci PowerShellu, která se aktivuje požadavkem HTTP a načte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

V souboru function.json jsou svázná data:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItem",
    "type": "sql",
    "direction": "in",
    "commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
    "commandType": "Text",
    "parameters": "@Id = {Query.id}",
    "connectionStringSetting": "SqlConnectionString"
}

Oddíl konfigurace vysvětluje tyto vlastnosti.

Následuje ukázkový kód PowerShellu pro funkci v run.ps1 souboru:

using namespace System.Net

param($Request, $todoItem)

Write-Host "PowerShell function with SQL Input Binding processed a request."

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $todoItem
})

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci PowerShellu aktivovanou požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "get"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "in",
    "commandText": "DeleteToDo",
    "commandType": "StoredProcedure",
    "parameters": "@Id = {Query.id}",
    "connectionStringSetting": "SqlConnectionString"
}

Oddíl konfigurace vysvětluje tyto vlastnosti.

Následuje ukázkový kód PowerShellu pro funkci v run.ps1 souboru:

using namespace System.Net

param($Request, $todoItems)

Write-Host "PowerShell function with SQL Input Binding processed a request."

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [System.Net.HttpStatusCode]::OK
    Body = $todoItems
})

Další ukázky vstupní vazby Azure SQL jsou k dispozici v úložišti GitHub.

Tato část obsahuje následující příklady:

Příklady odkazují na tabulku databáze:

CREATE TABLE dbo.ToDo (
    [Id] UNIQUEIDENTIFIER PRIMARY KEY,
    [order] INT NULL,
    [title] NVARCHAR(200) NOT NULL,
    [url] NVARCHAR(200) NOT NULL,
    [completed] BIT NOT NULL
);

Trigger HTTP, získání více řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci Pythonu, která se aktivuje požadavkem HTTP a přečte z dotazu a vrátí výsledky v odpovědi HTTP.

Následuje ukázkový kód Pythonu pro soubor function_app.py:

import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType

app = func.FunctionApp()

@app.function_name(name="GetToDo")
@app.route(route="gettodo")
@app.sql_input(arg_name="todo",
                        command_text="select [Id], [order], [title], [url], [completed] from dbo.ToDo",
                        command_type="Text",
                        connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todo))

    return func.HttpResponse(
        json.dumps(rows),
        status_code=200,
        mimetype="application/json"
    )

Trigger HTTP, získání řádku podle ID z řetězce dotazu

Následující příklad ukazuje vstupní vazbu SQL ve funkci Pythonu, která se aktivuje požadavkem HTTP a načte z dotazu filtrovaného parametrem z řetězce dotazu a vrátí řádek v odpovědi HTTP.

Následuje ukázkový kód Pythonu pro soubor function_app.py:

import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType

app = func.FunctionApp()

@app.function_name(name="GetToDo")
@app.route(route="gettodo/{id}")
@app.sql_input(arg_name="todo",
                        command_text="select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
                        command_type="Text",
                        parameters="@Id={id}",
                        connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todo))

    return func.HttpResponse(
        json.dumps(rows),
        status_code=200,
        mimetype="application/json"
    )

Trigger HTTP, odstranění řádků

Následující příklad ukazuje vstupní vazbu SQL v souboru function.json a funkci Pythonu aktivovanou požadavkem HTTP a spustí uloženou proceduru se vstupem z parametru dotazu požadavku HTTP.

Uložená procedura dbo.DeleteToDo musí být vytvořena v databázi. V tomto příkladu uložená procedura odstraní jeden záznam nebo všechny záznamy v závislosti na hodnotě parametru.

CREATE PROCEDURE [dbo].[DeleteToDo]
    @Id NVARCHAR(100)
AS
    DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
    IF @UId IS NOT NULL AND @Id != ''
    BEGIN
        DELETE FROM dbo.ToDo WHERE Id = @UID
    END
    ELSE
    BEGIN
        DELETE FROM dbo.ToDo WHERE @ID = ''
    END

    SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO

Následuje ukázkový kód Pythonu pro soubor function_app.py:

import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType

app = func.FunctionApp()

@app.function_name(name="DeleteToDo")
@app.route(route="deletetodo/{id}")
@app.sql_input(arg_name="todo",
                        command_text="DeleteToDo",
                        command_type="StoredProcedure",
                        parameters="@Id={id}",
                        connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
    rows = list(map(lambda r: json.loads(r.to_json()), todo))

    return func.HttpResponse(
        json.dumps(rows),
        status_code=200,
        mimetype="application/json"
    )

Atributy

Knihovna jazyka C# pomocí atributu SqlAttribute deklaruje vazby SQL funkce, která má následující vlastnosti:

Vlastnost atributu Popis
CommandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
ConnectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí.
CommandType Povinný: Hodnota CommandType , což je Text pro dotaz a StoredProcedure pro uloženou proceduru.
Parametry Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Poznámky

V knihovně modulu runtime funkcí Java použijte @SQLInput anotaci (com.microsoft.azure.functions.sql.annotation.SQLInput) u parametrů, jejichž hodnota pochází z Azure SQL. Tato poznámka podporuje následující prvky:

Element (Prvek) Popis
commandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
connectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí.
commandType Povinný: Hodnota CommandType, která je "Text" pro dotaz a "StoredProcedure" pro uloženou proceduru.
Jméno Požadováno. Jedinečný název vazby funkce.
parameters Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Konfigurace

Následující tabulka vysvětluje vlastnosti, které můžete nastavit u objektu předaného options metodě input.sql() .

Vlastnost Popis
commandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
connectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí. Volitelná klíčová slova v hodnotě připojovací řetězec jsou k dispozici pro upřesnění připojení vazeb SQL.
commandType Povinný: Hodnota CommandType , což je Text pro dotaz a StoredProcedure pro uloženou proceduru.
parameters Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Konfigurace

Následující tabulka vysvětluje vlastnosti konfigurace vazby, které jste nastavili v souboru function.json.

vlastnost function.json Popis
type Povinný: Musí být nastavena na sqlhodnotu .
direction Povinný: Musí být nastavena na inhodnotu .
Jméno Požadováno. Název proměnné, která představuje výsledek dotazu v kódu funkce.
commandText Povinný: Příkaz dotazu Transact-SQL nebo název uložené procedury spuštěné vazbou.
connectionStringSetting Povinný: Název nastavení aplikace, které obsahuje připojovací řetězec databáze, pro kterou se spouští dotaz nebo uložená procedura. Tato hodnota není skutečným připojovací řetězec a musí se místo toho přeložit na název proměnné prostředí. Volitelná klíčová slova v hodnotě připojovací řetězec jsou k dispozici pro upřesnění připojení vazeb SQL.
commandType Povinný: Hodnota CommandType , což je Text pro dotaz a StoredProcedure pro uloženou proceduru.
parameters Nepovinné. Nula nebo více hodnot parametrů předaných příkazu během provádění jako jeden řetězec. Musí dodržovat formát @param1=param1,@param2=param2. Název parametru ani hodnota parametru nesmí obsahovat čárku (,) ani znaménko rovná se (=).

Při místním vývoji přidejte nastavení aplikace do souboru local.settings.json v kolekci Values .

Využití

Definice vazby zahrnuje text příkazu SQL, typ příkazu, parametry a název nastavení připojovací řetězec. Příkazem může být dotaz Transact-SQL (T-SQL) s typem System.Data.CommandType.Text příkazu nebo názvem uložené procedury s typem System.Data.CommandType.StoredProcedurepříkazu . Název nastavení připojovací řetězec odpovídá nastavení aplikace (pro local.settings.json místní vývoj), které obsahuje připojovací řetězec instanci Azure SQL nebo SQL Serveru.

Důležité

Pro zajištění optimálního zabezpečení byste měli použít ID Microsoft Entra se spravovanými identitami pro připojení mezi službami Functions a službou Azure SQL Database. Spravované identity usnadňují zabezpečení aplikace odstraněním tajných kódů z nasazení aplikací, jako jsou přihlašovací údaje v připojovací řetězec, názvy serverů a používané porty. V tomto kurzu se dozvíte, jak pomocí spravovaných identit připojit aplikaci funkcí k Azure SQL pomocí spravovaných identit a vazeb SQL.

Dotazy prováděné vstupní vazbou jsou parametrizovány v Microsoft.Data.SqlClient, aby se snížilo riziko injektáže SQL z hodnot parametrů předaných do vazby.

Pokud dojde k výjimce při spuštění vstupní vazby SQL, kód funkce se nespustí. Výsledkem může být vrácený kód chyby, například trigger HTTP vracející kód chyby 500.

Další kroky