Início Rápido: Usar o Python para se conectar e consultar dados no Banco de Dados do Azure para PostgreSQL – Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL – Servidor Flexível

Neste início rápido, você se conectará a uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL usando Python. Em seguida, usará instruções SQL para consultar, inserir, atualizar e excluir dados no banco de dados de plataformas macOS, Ubuntu Linux e Windows.

As etapas deste artigo incluem dois métodos de autenticação: a autenticação do Microsoft Entra e a autenticação do PostgreSQL. A guia Sem senha mostra a autenticação do Microsoft Entra e a guia Senha mostra a autenticação do PostgreSQL.

A autenticação do Microsoft Entra é um mecanismo de conexão do Banco de Dados do Azure para PostgreSQL que usa as identidades definidas no Microsoft Entra ID. Com a autenticação do Microsoft Entra, você pode gerenciar as identidades de usuários do banco de dados e outros serviços da Microsoft em uma só localização central, o que simplifica o gerenciamento de permissões. Para saber mais, confira Autenticação do Microsoft Entra com o Banco de Dados do Azure para PostgreSQL – Servidor Flexível.

A autenticação PostgreSQL usa contas armazenadas no PostgreSQL. Se você optar por usar senhas como credenciais para as contas, essas credenciais serão armazenadas na tabela user. Como essas senhas são armazenadas no PostgreSQL, você precisa gerenciar a rotação das senhas por conta própria.

Este artigo pressupõe que você está familiarizado com o desenvolvimento usando Python, mas começou recentemente a trabalhar com o servidor flexível do Banco de Dados do Azure para PostgreSQL.

Pré-requisitos

Adicionar regras de firewall para a estação de trabalho do cliente

Configurar a integração do Microsoft Entra no servidor (somente sem senha)

Se você estiver seguindo as etapas de autenticação sem senha, a autenticação do Microsoft Entra deverá ser configurada para sua instância de servidor e você deverá ser atribuído como administrador do Microsoft Entra na instância do servidor. Siga as etapas em Configurar a integração do Microsoft Entra para garantir que a autenticação do Microsoft Entra seja configurada e se você seja atribuído como administrador do Microsoft Entra em sua instância de servidor.

Preparar seu ambiente de desenvolvimento

Mude para uma pasta em que você deseja executar o código e crie e ative um ambiente virtual. Um ambiente virtual é um diretório independente para uma versão específica do Python, além dos outros pacotes necessários para esse aplicativo.

Execute os seguintes comandos para criar e ativar um ambiente virtual:

py -3 -m venv .venv
.venv\Scripts\activate

Instalar as bibliotecas do Python

Instale as bibliotecas do Python necessárias para executar os exemplos de código.

A biblioteca azure-identity dá suporte à autenticação de token do Microsoft Entra no SDK do Azure.

pip install azure-identity

Adicionar código de autenticação

Nesta seção, você adicionará o código de autenticação ao diretório de trabalho e executará as etapas adicionais necessárias para autenticação e autorização com a instância do servidor.

  1. Copie o código a seguir em um editor e salve-o em um arquivo chamado get_conn.py.

    import urllib.parse
    import os
    
    from azure.identity import DefaultAzureCredential
    
    # IMPORTANT! This code is for demonstration purposes only. It's not suitable for use in production. 
    # For example, tokens issued by Microsoft Entra ID have a limited lifetime (24 hours by default). 
    # In production code, you need to implement a token refresh policy.
    
    def get_connection_uri():
    
        # Read URI parameters from the environment
        dbhost = os.environ['DBHOST']
        dbname = os.environ['DBNAME']
        dbuser = urllib.parse.quote(os.environ['DBUSER'])
        sslmode = os.environ['SSLMODE']
    
        # Use passwordless authentication via DefaultAzureCredential.
        # IMPORTANT! This code is for demonstration purposes only. DefaultAzureCredential() is invoked on every call.
        # In practice, it's better to persist the credential across calls and reuse it so you can take advantage of token
        # caching and minimize round trips to the identity provider. To learn more, see:
        # https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/identity/azure-identity/TOKEN_CACHING.md 
        credential = DefaultAzureCredential()
    
        # Call get_token() to get a token from Microsft Entra ID and add it as the password in the URI.
        # Note the requested scope parameter in the call to get_token, "https://ossrdbms-aad.database.windows.net/.default".
        password = credential.get_token("https://ossrdbms-aad.database.windows.net/.default").token
    
        db_uri = f"postgresql://{dbuser}:{password}@{dbhost}/{dbname}?sslmode={sslmode}"
        return db_uri
    
  2. Obter informações da conexão de banco de dados.

    1. No portal do Azure, procure e selecione o nome do seu servidor flexível do Banco de Dados do Azure para PostgreSQL.
    2. Na página Visão geral do servidor, copie o Nome do servidor totalmente qualificado. O Nome do servidor totalmente qualificado está sempre no formato <my-server-name>.postgres.database.azure.com.
    3. No menu à esquerda, em Segurança, selecione Autenticação. Verifique se sua conta está listada em Administradores do Microsoft Entra. Se não estiver, conclua as etapas em Configurar a integração do Microsoft Entra no servidor (somente sem senha).
  3. Defina variáveis de ambiente para os elementos da URI de conexão:

    set DBHOST=<server-name>
    set DBNAME=<database-name>
    set DBUSER=<username>
    set SSLMODE=require
    

    Substitua os seguintes valores de espaço reservado nos comandos:

    • <server-name> pelo valor copiado do portal do Azure.
    • <username> pelo nome de usuário do Azure; por exemplo, john@contoso.com.
    • <database-name> pelo nome do banco de dados de servidor flexível do Banco de Dados do Azure para PostgreSQL. Um banco de dados padrão chamado postgres foi criado automaticamente quando você criou seu servidor. Você pode usar esse banco de dados ou criar um novo usando os comandos SQL.
  4. Entre no Azure na sua estação de trabalho. Você pode entrar usando a CLI do Azure, o Azure PowerShell ou o Azure Developer CLI. Por exemplo, para entrar por meio da CLI do Azure, insira este comando:

    az login
    

    O código de autenticação usa DefaultAzureCredential para autenticar com o Microsoft Entra ID e obter um token que autoriza você a executar operações na sua instância de servidor. DefaultAzureCredential dá suporte a uma cadeia de tipos de credencial de autenticação. Entre as credenciais com suporte estão as credenciais com as quais você está conectado para usar as ferramentas de desenvolvedor com a CLI do Azure, o Azure PowerShell ou o Azure Developer CLI.

Como executar os exemplos de Python

Para cada exemplo de código neste artigo:

  1. Crie um arquivo em um editor de texto.

  2. Adicione o exemplo de código ao arquivo.

  3. Salve o arquivo na pasta do seu projeto com uma extensão .py, como postgres-insert.py. Para Windows, verifique se a codificação UTF-8 está selecionada quando você salvar o arquivo.

  4. No tipo python da pasta do projeto seguido pelo nome do arquivo, por exemplo python postgres-insert.py.

Criar uma tabela e inserir dados

O exemplo de código a seguir conecta-se ao seu banco de dados de servidor flexível do Banco de Dados do Azure para PostgreSQL usando a função psycopg.connect e carrega os dados com uma instrução INSERT do SQL. A função cursor.execute executa a consulta SQL no banco de dados.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Drop previous table of same name if one exists
cursor.execute("DROP TABLE IF EXISTS inventory;")
print("Finished dropping table (if existed)")

# Create a table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
print("Finished creating table")

# Insert some data into the table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
print("Inserted 3 rows of data")

# Clean up
conn.commit()
cursor.close()
conn.close()

Quando o código é executado com êxito, ele produz a seguinte saída:

Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data

Ler dados

O exemplo de código a seguir conecta-se ao seu banco de dados do servidor flexível do Banco de Dados do Azure para PostgreSQL e usa cursor.executecom a instrução SELECT do SQL para leitura de dados. Essa função aceita uma consulta e retorna um conjunto de resultados a ser iterado usando cursor.fetchall().

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Fetch all rows from table
cursor.execute("SELECT * FROM inventory;")
rows = cursor.fetchall()

# Print all rows
for row in rows:
    print("Data row = (%s, %s, %s)" %(str(row[0]), str(row[1]), str(row[2])))

# Cleanup
conn.commit()
cursor.close()
conn.close()

Quando o código é executado com êxito, ele produz a seguinte saída:

Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)

Atualizar dados

O exemplo de código a seguir conecta-se ao seu banco de dados de servidor flexível do Banco de Dados do Azure para PostgreSQL e usa cursor.execute com a instrução UPDATE do SQL para atualização de dados.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Update a data row in the table
cursor.execute("UPDATE inventory SET quantity = %s WHERE name = %s;", (200, "banana"))
print("Updated 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()

Excluir os dados

O exemplo de código a seguir conecta-se ao seu banco de dados de servidor flexível do Banco de Dados do Azure para PostgreSQL e usa cursor.execute com a instrução DELETE do SQL para exclusão de um item de inventário que você inseriu anteriormente.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string) 
print("Connection established")
cursor = conn.cursor()

# Delete data row from table
cursor.execute("DELETE FROM inventory WHERE name = %s;", ("orange",))
print("Deleted 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()

Próximas etapas