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
- Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Uma instância do Banco de Dados do Azure para PostgreSQL com Servidor Flexível. Para criar uma instância de servidor flexível do Banco de Dados do Azure para PostgreSQL, consulte Criar uma instância do Banco de Dados do Azure para PostgreSQL – Servidor Flexível usando o portal do Azure.
- Python 3.8 e posterior.
- Instalador do pacote pip mais recente.
Adicionar regras de firewall para a estação de trabalho do cliente
- Se você criou sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL com Acesso privado (Integração da VNet), será necessário se conectar ao servidor a partir de um recurso dentro da mesma VNet que o seu servidor. Você pode criar uma máquina virtual e adicioná-la à VNet criada com sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL. Confira Criar e gerenciar a rede virtual do Banco de Dados do Azure para PostgreSQL – Servidor Flexível usando a CLI do Azure.
- Se você criou sua instância de servidor flexível do Banco de Dados do Azure para PostgreSQL com Acesso público (endereços IP permitidos), é possível adicionar o seu endereço IP local à lista de regras de firewall no seu servidor. Confira Criar e gerenciar regras de firewall do Banco de Dados do Azure para PostgreSQL – Servidor Flexível usando a CLI do Azure.
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.
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
Obter informações da conexão de banco de dados.
- No portal do Azure, procure e selecione o nome do seu servidor flexível do Banco de Dados do Azure para PostgreSQL.
- 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.
- 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).
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.
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:
Crie um arquivo em um editor de texto.
Adicione o exemplo de código ao arquivo.
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.
No tipo
python
da pasta do projeto seguido pelo nome do arquivo, por exemplopython 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()