Краткое руководство. Использование Python для подключения и запроса данных в База данных Azure для PostgreSQL — гибкий сервер
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер
В этом кратком руководстве вы подключаетесь к База данных Azure для PostgreSQL гибкому экземпляру сервера с помощью Python. Затем вы используете инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных из macOS, Ubuntu Linux и платформ Windows.
Действия, описанные в этой статье, включают два метода проверки подлинности: проверку подлинности Microsoft Entra и проверку подлинности PostgreSQL. На вкладке "Без пароля" показана проверка подлинности Microsoft Entra, а на вкладке "Пароль " отображается проверка подлинности PostgreSQL.
Проверка подлинности Microsoft Entra — это механизм подключения к База данных Azure для PostgreSQL с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службы Майкрософт в центральном расположении, что упрощает управление разрешениями. Дополнительные сведения см. в разделе проверки подлинности Microsoft Entra с помощью База данных Azure для PostgreSQL — гибкий сервер.
Проверка подлинности PostgreSQL использует учетные записи, хранящиеся в PostgreSQL. Если вы решили использовать пароли в качестве учетных данных для учетных записей, эти учетные данные будут храниться в user
таблице. Так как эти пароли хранятся в PostgreSQL, вам нужно самостоятельно управлять сменой паролей.
В этой статье предполагается, что вы знакомы с разработкой с помощью Python, но вы не знакомы с База данных Azure для PostgreSQL гибким сервером.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Гибкий экземпляр сервера База данных Azure для PostgreSQL. Сведения о создании гибкого экземпляра сервера База данных Azure для PostgreSQL см. в статье "Создание База данных Azure для PostgreSQL — гибкий экземпляр сервера с помощью портал Azure".
- Python 3.8+.
- Установщик пакета pip последней версии.
Добавление правил брандмауэра для рабочей станции клиента
- Если вы создали гибкий экземпляр сервера База данных Azure для PostgreSQL с частным доступом (интеграция с виртуальной сетью), необходимо подключиться к серверу из ресурса в той же виртуальной сети, что и сервер. Вы можете создать виртуальную машину и добавить ее в виртуальную сеть, созданную с помощью База данных Azure для PostgreSQL гибкого экземпляра сервера. Дополнительные сведения см. в статье Создание виртуальной сети для Базы данных Azure для PostgreSQL (Гибкий сервер) и управление ею с помощью Azure CLI.
- Если вы создали гибкий экземпляр сервера База данных Azure для PostgreSQL с общедоступным доступом (разрешенными IP-адресами), вы можете добавить локальный IP-адрес в список правил брандмауэра на сервере. Дополнительные сведения см. в статье Создание правил брандмауэра для Базы данных Azure для PostgreSQL (Гибкий сервер) и управление ими с помощью Azure CLI.
Настройка интеграции Microsoft Entra на сервере (только без пароля)
Если вы выполняете действия по проверке подлинности без пароля, проверка подлинности Microsoft Entra должна быть настроена для экземпляра сервера, и вы должны быть назначены администратором Microsoft Entra на экземпляре сервера. Выполните действия, описанные в разделе "Настройка интеграции Microsoft Entra", чтобы убедиться, что проверка подлинности Microsoft Entra настроена и назначена администратором Microsoft Entra на экземпляре сервера.
Подготовка среды разработки
Перейдите в папку, в которой необходимо запустить код и создать и активировать виртуальную среду. Виртуальная среда — это автономный каталог для определенной версии Python и других пакетов, необходимых для этого приложения.
Выполните следующие команды, чтобы создать и активировать виртуальную среду:
py -3 -m venv .venv
.venv\Scripts\activate
Установка библиотек Python
Установите библиотеки Python, необходимые для выполнения примеров кода.
Установите библиотеку удостоверений Azure, которая обеспечивает поддержку проверки подлинности маркера Microsoft Entra в пакете SDK Azure.
pip install azure-identity
Добавление кода проверки подлинности
В этом разделе вы добавите код проверки подлинности в рабочий каталог и выполните все дополнительные действия, необходимые для проверки подлинности и авторизации с экземпляром сервера.
Скопируйте следующий код в редактор и сохраните его в файле с именем 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
Получение сведений о подключении к базе данных.
- В портал Azure найдите и выберите имя гибкого сервера База данных Azure для PostgreSQL.
- На странице обзора сервера скопируйте полное имя сервера. Полное имя сервера всегда имеет формат <имя-сервера>.postgres.database.azure.com.
- В меню слева в разделе "Безопасность" выберите " Проверка подлинности". Убедитесь, что ваша учетная запись указана в разделе "Администраторы Microsoft Entra". Если это не так, выполните действия, описанные в разделе "Настройка интеграции Microsoft Entra" на сервере (только без пароля).
Задайте переменные среды для элементов URI подключения:
set DBHOST=<server-name> set DBNAME=<database-name> set DBUSER=<username> set SSLMODE=require
Замените следующие значения заполнителей в командах:
<server-name>
значение, скопированное из портал Azure.<username>
с именем пользователя Azure; Например.john@contoso.com
.<database-name>
с именем гибкой базы данных сервера База данных Azure для PostgreSQL. При создании сервера автоматически создается база данных по умолчанию с именем postgres. Эту базу данных можно использовать или создать новую базу данных с помощью команд SQL.
Войдите в Azure на рабочей станции. Вы можете войти с помощью Azure CLI, Azure PowerShell или Azure Developer CLI. Например, чтобы войти с помощью Azure CLI, введите следующую команду:
az login
Код проверки подлинности используется
DefaultAzureCredential
для проверки подлинности с помощью идентификатора Microsoft Entra и получения маркера, который разрешает выполнять операции на экземпляре сервера.DefaultAzureCredential
поддерживает цепочку типов учетных данных проверки подлинности. Среди поддерживаемых учетных данных являются учетные данные, которые вы вошли в средства разработчика, такие как Azure CLI, Azure PowerShell или Azure Developer CLI.
Выполнение примеров кода Python
Для каждого примера кода в этой статье сделайте следующее:
Создайте файл в текстовом редакторе.
Добавьте пример кода в файл.
Сохраните файл в папке проекта с расширением PY, например postgres-insert.py. При сохранении файла в ОС Windows обязательно выберите кодировку UTF-8.
В папке
python
проекта, за которой следует имя файла, напримерpython postgres-insert.py
.
Создание таблицы и вставка данных
Следующий пример кода подключается к базе данных гибкого сервера База данных Azure для PostgreSQL с помощью функции и загружает данные с помощью psycopg.connect
инструкции SQL INSERT. Функция cursor.execute
выполняет SQL-запрос к базе данных.
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()
При успешном выполнении кода возвращаются следующие данные:
Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data
Чтение данных
Следующий пример кода подключается к гибкой базе данных сервера База данных Azure для PostgreSQL и использует cursor.execute с инструкцией SQL SELECT для чтения данных. Эта функция принимает запрос и возвращает результирующий набор для итерации с помощью 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()
При успешном выполнении кода возвращаются следующие данные:
Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)
Обновление данных
Следующий пример кода подключается к гибкой базе данных сервера База данных Azure для PostgreSQL и использует cursor.execute с инструкцией SQL UPDATE для обновления данных.
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()
Удаление данных
Следующий пример кода подключается к гибкой базе данных сервера База данных Azure для PostgreSQL и использует cursor.execute с инструкцией SQL DELETE для удаления элемента инвентаризации, который вы ранее вставили.
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()