Inicio rápido: Uso de Python para conectarse y consultar datos en un servidor flexible de Azure Database for PostgreSQL
SE APLICA A: Servidor flexible de Azure Database for PostgreSQL
En esta guía de inicio rápido, se va a conectar a una instancia de Servidor flexible de Azure Database for PostgreSQL mediante Python. Después, va a usar instrucciones SQL para consultar, insertar, actualizar y eliminar datos en la base de datos desde plataformas macOS, Ubuntu Linux y Windows.
Los pasos de este artículo incluyen dos métodos de autenticación: autenticación de Microsoft Entra y autenticación de PostgreSQL. La pestaña Sin contraseña muestra la autenticación de Microsoft Entra y la pestaña Contraseña muestra la autenticación de PostgreSQL.
La autenticación de Microsoft Entra es un mecanismo de conexión a Azure Database for PostgreSQL mediante identidades definidas en Microsoft Entra ID. Con la autenticación de Microsoft Entra, puede administrar las identidades de los usuarios de la base de datos y otros servicios de Microsoft en una ubicación central, lo que simplifica la administración de permisos. Para obtener más información, consulte Autenticación de Microsoft Entra con la opción de Servidor flexible de Azure Database for PostgreSQL.
La autenticación de PostgreSQL usa cuentas almacenadas en PostgreSQL. Si decide usar contraseñas como credenciales para las cuentas, estas credenciales se almacenarán en la tabla user
. Dado que estas contraseñas se almacenan en PostgreSQL, deberá administrar la rotación de las contraseñas por su cuenta.
En este artículo, se da por supuesto que está familiarizado con el desarrollo con Python, pero que nunca ha usado una instancia de Servidor flexible de Azure Database for PostgreSQL.
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Una instancia de servidor flexible de Azure Database for PostgreSQL. Para crear una instancia de Servidor flexible de Azure Database for PostgreSQL, consulte Creación de una instancia de Servidor flexible de Azure Database for PostgreSQL mediante Azure Portal.
- Python 3.8+.
- Instalador de paquetes pip más reciente.
Adición de reglas de firewall para la estación de trabajo cliente
- Si ha creado la instancia de Servidor flexible de Azure Database for PostgreSQL con Acceso privado (integración con red virtual), debe conectarse al servidor desde un recurso que se encuentre en la misma red virtual que el servidor. Puede crear una máquina virtual y agregarla a la red virtual creada con la instancia de Servidor flexible de Azure Database for PostgreSQL. Consulte Creación y administración de redes virtuales en Servidor flexible de Azure Database for PostgreSQL mediante la CLI de Azure.
- Si ha creado la instancia de Servidor flexible de Azure Database for PostgreSQL con Acceso público (direcciones IP permitidas), puede agregar la dirección IP local a la lista de reglas de firewall del servidor. Consulte Creación y administración de las reglas de firewall de Servidor flexible de Azure Database for PostgreSQL mediante la CLI de Azure.
Configuración de la integración de Microsoft Entra en el servidor (solo sin contraseña)
Si sigue los pasos para la autenticación sin contraseña, se debe configurar la autenticación de Microsoft Entra para la instancia del servidor y se debe asignar como administrador de Microsoft Entra en la instancia del servidor. Siga los pasos descritos en Configuración de la integración de Microsoft Entra para asegurarse de que la autenticación de Microsoft Entra esté configurada y que se le haya asignado como administrador de Microsoft Entra en la instancia del servidor.
Preparación del entorno de desarrollo
Cambie a una carpeta en la que quiera ejecutar el código y cree y active un entorno virtual. Un entorno virtual es un directorio autocontenido para una versión específica de Python, junto con los demás paquetes necesarios para esa aplicación.
Ejecute los comandos siguientes para crear y activar un entorno virtual:
py -3 -m venv .venv
.venv\Scripts\activate
Instalación de las bibliotecas de Python
Instale las bibliotecas de Python necesarias para ejecutar los ejemplos de código.
Instale la biblioteca azure-identity, que proporciona compatibilidad con la autenticación de tokens de Microsoft Entra en el SDK de Azure.
pip install azure-identity
Adición del código de autenticación
En esta sección, agregará el código de autenticación al directorio de trabajo y realizará los pasos adicionales necesarios para la autenticación y autorización con la instancia del servidor.
Copie el código siguiente en un editor y guárdelo en un archivo llamado 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
Obtenga la información de conexión de la base de datos.
- En Azure Portal, busque y seleccione el nombre de la instancia de Servidor flexible de Azure Database for PostgreSQL.
- En la página Información general del servidor, copie el nombre completo del servidor. El nombre completo del servidor siempre tiene el formato<nombreDeMiServidor>.postgres.database.azure.com.
- En el menú de la izquierda, en Seguridad, seleccione Autenticación. Asegúrese de que la cuenta aparezca en Administradores de Microsoft Entra. Si no aparece, complete los pasos descritos en Configuración de la integración de Microsoft Entra en el servidor (solo sin contraseña).
Establezca las variables de entorno para los elementos del identificador URI de conexión:
set DBHOST=<server-name> set DBNAME=<database-name> set DBUSER=<username> set SSLMODE=require
Reemplace los siguientes valores de marcador de posición en los comandos:
<server-name>
por el valor que copió de Azure Portal.<username>
por el nombre de usuario de Azure; por ejemplo,john@contoso.com
.<database-name>
por el nombre de la base de datos del Servidor flexible de Azure Database for PostgreSQL. Se creará automáticamente una base de datos predeterminada denominada postgres al crear el servidor. Puede usar esa base de datos o crear una base de datos mediante comandos SQL.
Inicie sesión en Azure en la estación de trabajo. Puede iniciar sesión mediante la CLI de Azure, Azure PowerShell o Azure Developer CLI. Por ejemplo, para iniciar sesión mediante la CLI de Azure, escriba este comando:
az login
El código de autenticación usa
DefaultAzureCredential
para autenticarse con Microsoft Entra ID y obtener un token que le autorice a realizar operaciones en la instancia del servidor.DefaultAzureCredential
admite una cadena de tipos de credenciales de autenticación. Entre las credenciales admitidas, se encuentran las credenciales con las que ha iniciado sesión en las herramientas de desarrollo, como la CLI de Azure, Azure PowerShell o Azure Developer CLI.
Cómo ejecutar los ejemplos de Python
Para cada ejemplo de código de este artículo:
Cree un nuevo archivo en un editor de texto.
Agregue el ejemplo de código al archivo.
Guarde el archivo en la carpeta del proyecto con una extensión .py, como postgres-insert.py. En Windows, asegúrese de que la codificación UTF-8 está seleccionada al guardar el archivo.
En la carpeta del proyecto, escriba
python
seguido del nombre de archivo, por ejemplo,python postgres-insert.py
.
Crear una tabla e insertar datos
El ejemplo de código siguiente, se conecta a la base de datos del Servidor flexible de Azure Database for PostgreSQL mediante la función psycopg.connect
y carga los datos con una instrucción INSERT de SQL. La función cursor.execute
ejecuta la consulta SQL en la base de datos.
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()
Cuando el código se ejecuta correctamente, genera el siguiente resultado:
Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data
Lectura de datos
El ejemplo de código siguiente se conecta a la base de datos del Servidor flexible de Azure Database for PostgreSQL y usa cursor.execute con la instrucción SELECT de SQL para leer los datos. Esta función acepta una consulta y devuelve un conjunto de resultados para iterar mediante 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()
Cuando el código se ejecuta correctamente, genera el siguiente resultado:
Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)
Actualizar datos
El ejemplo de código siguiente se conecta a la base de datos del Servidor flexible de Azure Database for PostgreSQL y usa cursor.execute con la instrucción UPDATE de SQL para actualizar los datos.
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()
Eliminación de datos
El ejemplo de código siguiente se conecta a la base de datos del Servidor flexible de Azure Database for PostgreSQL y usa cursor.execute con la instrucción DELETE de SQL para eliminar un elemento de inventario que insertó 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()