Grave linhas no SQL Database a partir de uma function
Envie instruções de escrita de uma function ao SQL Database pela API da Azion e verifique o resultado de cada instrução antes de confiar nele.
Você grava linhas em um banco de dados do SQL Database a partir de uma function pela API da Azion, com um personal token que a function lê de uma variável de ambiente. Para ler linhas dentro de uma function, consulte Consulte um banco de dados de uma function.
Uma function abre um banco de dados por uma réplica de leitura, e essa conexão é somente leitura: uma instrução que escreve falha com Error: SQLite failure: `attempt to write a readonly database` . A instância principal recebe toda escrita, então a function envia suas instruções de escrita ao endpoint de consulta da API da Azion, que chega até ela.
- A function lê o identificador do banco de dados e o token de variáveis de ambiente e envia as instruções ao endpoint de consulta.
- Um status fora do intervalo de 200 a 299 significa que a API rejeitou a requisição inteira, e nenhuma instrução rodou.
- Um
200traz uma entrada por instrução. Uma entrada comerroré uma instrução que falhou, mesmo que a requisição tenha dado certo. - Quando nenhuma entrada traz
error, cada instrução rodou, e os seusresultsinformam as linhas que ela gravou.
Pré-requisitos
- SQL Database habilitado na sua conta. O produto está em Preview e não vem habilitado por padrão, então solicite acesso pelo Technical Support.
- Um banco de dados, o seu identificador e a tabela em que a function grava. O identificador é o
idque a resposta de criação retorna. Para criá-los, consulte Crie e gerencie bancos de dados e Crie tabelas e consulte dados. - Um personal token para a function, separado do que a Azion CLI usa. A conta dona dele precisa da permissão Edit SQL Database. Um token expira 1 dia depois de criado, a menos que você escolha uma expiração maior, e toda escrita falha quando ele expira, então defina uma expiração que cubra o tempo em que a function roda.
- A Azion CLI instalada e autorizada, para armazenar as variáveis de ambiente.
- Um projeto de function ao qual adicionar o código. Para criar um e fazer o deploy, consulte Faça o deploy de uma function com a Azion CLI.
Os exemplos gravam em uma tabela criada com CREATE TABLE items (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL); e armazenam o identificador e o token como SQL_DATABASE_ID e SQL_TOKEN. Substitua esses valores, <database-id> e <personal-token> pelos seus.
Armazene o identificador do banco de dados e o token
A function lê os dois valores em tempo de execução, então nenhum deles entra no código ou no repositório dele. O identificador não é confidencial, e o token é: a CLI nunca imprime de volta uma variável secreta. Uma key que contém token é enviada como secreta por padrão.
Para criar as duas variáveis com a Azion CLI:
Cada comando imprime o UUID da variável que criou:
Uma mudança em uma variável só chega a uma function depois de um novo deploy da function, então crie as duas antes de fazer o deploy do código da próxima seção. A conta guarda as duas variáveis, e a function lê cada uma com Azion.env.get(). Para os limites das variáveis, consulte Variáveis de ambiente.
Envie as instruções a partir da function
O endpoint de consulta recebe um array statements de strings SQL, executa as instruções em ordem e retorna uma entrada por instrução em data. Uma chamada com 100 instruções dá certo, então um conjunto de escritas relacionadas segue em uma única chamada. O corpo traz texto SQL e nenhum parâmetro, então um valor de texto vai dentro da instrução: coloque-o entre aspas, duplique cada aspa simples que ele contém e valide-o antes que ele chegue a uma instrução.
Para gravar uma linha, adicione este código ao entrypoint da function:
writeRows verifica o resultado em dois lugares, porque uma escrita falha em dois lugares:
-
A requisição. Um status fora do intervalo de 200 a 299 significa que a API rejeitou a chamada inteira. Quando as instruções não podem ser executadas, a API responde
422com o código14005Execute SQL Exception. -
Cada instrução. Uma instrução que falha não faz a requisição falhar. A chamada responde
200, e a entrada dessa instrução trazerrorno lugar deresults:
Um cliente que lê só o status HTTP informa essa escrita como sucesso, e a linha nunca é gravada. Para todos os códigos e strings de erro, consulte Bancos de dados e consultas.
Faça o deploy da function, como mostra Faça o deploy de uma function com a Azion CLI. Uma instrução bem-sucedida retorna uma entrada cujo results traz rows_written, as linhas que essa instrução gravou:
Um POST à function com um name adiciona uma linha a items, e a function responde 201 com rows_written igual a 1. Uma escrita que falha responde 500, e a function registra no log o status ou a string de erro. Para ler essa linha de log, consulte Consultar logs de console de uma function.
Confirme que as linhas foram gravadas
A resposta da function informa o que a API retornou. Para ler as linhas de volta da tabela, envie um SELECT ao mesmo endpoint de consulta:
A API responde 200, e o results da entrada traz um array por linha em rows, com os valores na ordem de columns:
A tabela guarda as linhas que a function gravou. Uma function que lê a mesma tabela por Database.open as lê de uma réplica de leitura. Para saber como a instância principal e as réplicas dividem o trabalho, consulte Como o SQL Database funciona.