Compartir a través de


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

Adición de reglas de firewall para la estación de trabajo cliente

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.

  1. 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
    
  2. Obtenga la información de conexión de la base de datos.

    1. En Azure Portal, busque y seleccione el nombre de la instancia de Servidor flexible de Azure Database for PostgreSQL.
    2. 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.
    3. 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).
  3. 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.
  4. 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:

  1. Cree un nuevo archivo en un editor de texto.

  2. Agregue el ejemplo de código al archivo.

  3. 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.

  4. 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()

Pasos siguientes