Partilhar via


Guia de início rápido: usar Python para 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 conecta a uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL usando Python. Em seguida, você usa instruções SQL para consultar, inserir, atualizar e excluir dados no banco de dados das plataformas macOS, Ubuntu Linux e Windows.

As etapas neste artigo incluem dois métodos de autenticação: autenticação Microsoft Entra e autenticação 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 para se conectar ao Banco de Dados do Azure para PostgreSQL usando identidades definidas na ID do Microsoft Entra. Com a autenticação do Microsoft Entra, você pode gerenciar identidades de usuário de banco de dados e outros serviços da Microsoft em um local central, o que simplifica o gerenciamento de permissões. Para saber mais, consulte Autenticação do Microsoft Entra com o Banco de Dados do Azure para PostgreSQL - Servidor Flexível.

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

Este artigo pressupõe que você esteja familiarizado com o desenvolvimento usando Python, mas é novo no trabalho com o Banco de Dados do Azure para servidor flexível PostgreSQL.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
  • Uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL. Para criar o Banco de Dados do Azure para instância de servidor flexível do PostgreSQL, consulte Criar um Banco de Dados do Azure para PostgreSQL - instância do Servidor Flexível usando o portal do Azure.
  • Python 3.8+.
  • Instalador de pacote pip mais recente.

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

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

Se você estiver seguindo as etapas para autenticação sem senha, a autenticação do Microsoft Entra deverá ser configurada para sua instância do 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 esteja configurada e que você seja atribuído como administrador do Microsoft Entra na instância do servidor.

Preparar o ambiente de desenvolvimento

Mude para uma pasta onde você deseja executar o código e criar e ativar um ambiente virtual. Um ambiente virtual é um diretório autônomo para uma versão específica do Python mais os 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 Python

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

Instale a biblioteca azure-identity, que fornece 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ê adiciona o código de autenticação ao diretório de trabalho e executa todas 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. Obtenha informações de conexão com o banco de dados.

    1. No portal do Azure, procure e selecione o nome do 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 é sempre do 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 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> com o valor copiado do portal do Azure.
    • <username> com seu nome de usuário do Azure; Por exemplo. john@contoso.com.
    • <database-name> com o nome do seu Banco de Dados do Azure para banco de dados de servidor flexível 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 banco de dados usando comandos SQL.
  4. Entre no Azure em sua estação de trabalho. Você pode entrar usando a CLI do Azure, o Azure PowerShell ou a CLI do Desenvolvedor do Azure. Por exemplo, para entrar por meio da CLI do Azure, digite este comando:

    az login
    

    O código de autenticação é usado DefaultAzureCredential para autenticar com o Microsoft Entra ID e obter um token que autoriza você a executar operações na instância do servidor. DefaultAzureCredential suporta uma cadeia de tipos de credenciais de autenticação. Entre as credenciais suportadas estão credenciais com as quais você entrou em ferramentas de desenvolvedor, como a CLI do Azure, o Azure PowerShell ou a CLI do Desenvolvedor do Azure.

Como executar os exemplos Python

Para cada exemplo de código neste artigo:

  1. Crie um novo arquivo em um editor de texto.

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

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

  4. Na pasta do projeto, digite o nome python do arquivo seguido do nome do arquivo, por exemplo python postgres-insert.py.

Criar uma tabela e inserir dados

O exemplo de código a seguir se conecta ao banco de dados flexível do servidor do Banco de Dados do Azure para PostgreSQL usando a psycopg.connect função e carrega dados com uma instrução SQL INSERT . A cursor.execute função 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 se conecta 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 SQL SELECT para ler dados. Esta função aceita uma consulta e retorna um conjunto de resultados para iterar 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 se conecta ao seu Banco de Dados do Azure para banco de dados de servidor flexível PostgreSQL e usa cursor.execute com a instrução SQL UPDATE para atualizar 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()

Eliminar dados

O exemplo de código a seguir se conecta ao banco de dados flexível do servidor do Banco de Dados do Azure para PostgreSQL e usa cursor.execute com a instrução SQL DELETE para excluir 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óximos passos