Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этом кратком руководстве вы подключаетесь к гибкому экземпляру сервера базы данных Azure для PostgreSQL с помощью Python. Затем вы используете инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных из macOS, Ubuntu Linux и платформ Windows.
Действия, описанные в этой статье, включают два метода проверки подлинности: проверку подлинности Microsoft Entra и проверку подлинности PostgreSQL. На вкладке "Без пароля" показана проверка подлинности Microsoft Entra, а на вкладке "Пароль " отображается проверка подлинности PostgreSQL.
Проверка подлинности Microsoft Entra — это механизм подключения к База данных Azure для PostgreSQL с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службами Microsoft в центральном расположении, что упрощает управление разрешениями. Чтобы узнать больше, смотрите аутентификацию Microsoft Entra с помощью базы данных Azure для PostgreSQL.
Проверка подлинности PostgreSQL использует учетные записи, хранящиеся в PostgreSQL. Если вы решили использовать пароли в качестве учетных данных для учетных записей, эти учетные данные хранятся в user таблице. Так как эти пароли хранятся в PostgreSQL, вам нужно самостоятельно управлять сменой паролей.
В этой статье предполагается, что вы знакомы с разработкой с помощью Python, но вы не знакомы с Базой данных Azure для PostgreSQL.
Предварительные условия
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Гибкий сервер базы данных Azure для PostgreSQL. Чтобы создать гибкий экземпляр сервера Базы данных Azure для PostgreSQL, см. статью "Создание базы данных Azure для PostgreSQL".
- Python 3.8+.
- Установщик пакета pip последней версии.
Добавление правил брандмауэра для рабочей станции клиента
- Если вы создали гибкий экземпляр сервера Базы данных Azure для PostgreSQL с частным доступом (интеграция виртуальной сети), необходимо подключиться к серверу из ресурса в той же виртуальной сети, что и сервер. Вы можете создать виртуальную машину и добавить ее в виртуальную сеть, созданную с помощью гибкого экземпляра сервера Базы данных Azure для PostgreSQL. Обратитесь к сетевому взаимодействию.
- Если вы создали гибкий экземпляр сервера База данных Azure для PostgreSQL с общедоступным доступом (разрешенными IP-адресами), вы можете добавить локальный IP-адрес в список правил брандмауэра на сервере. Обратитесь к сетевому взаимодействию.
Настройка интеграции Microsoft Entra на сервере (только без пароля)
Если вы выполняете действия по проверке подлинности без пароля, проверка подлинности Microsoft Entra должна быть настроена для экземпляра сервера, и вы должны быть назначены администратором Microsoft Entra на экземпляре сервера. Выполните действия, описанные в разделе "Настройка интеграции Microsoft Entra", чтобы убедиться, что проверка подлинности Microsoft Entra настроена и что вы назначены администратором Microsoft Entra на экземпляре сервера.
Подготовка среды разработки
Перейдите в папку, в которой необходимо запустить код и создать и активировать виртуальную среду. Виртуальная среда — это автономный каталог для определенной версии Python и других пакетов, необходимых для этого приложения.
Выполните следующие команды, чтобы создать и активировать виртуальную среду:
py -3 -m venv .venv
.venv\Scripts\activate
Установка библиотек Python
Установите библиотеки Python, необходимые для выполнения примеров кода.
Установите библиотеку azure-identity, которая обеспечивает поддержку аутентификации токенов Microsoft Entra в пакете SDK Azure.
# Use the interpreter-bound pip to ensure installs go into the active venv/interpreter
python -m pip install --upgrade pip
python -m pip install azure-identity azure-keyvault-secrets
Добавление кода проверки подлинности
В этом разделе вы добавите код проверки подлинности в рабочий каталог и выполните все дополнительные действия, необходимые для проверки подлинности и авторизации с экземпляром сервера.
Перед добавлением кода проверки подлинности убедитесь, что необходимые пакеты для каждого примера установлены.
Обязательные пакеты (примеры в этой статье):
- Пример без пароля:
azure-identityazure-keyvault-secrets(при использовании Key Vault) - Пример пароля: (рекомендуется:
psycopgpython -m pip install "psycopg[binary]")
Необязательно. Создайте requirements.txt эти записи и установите их для python -m pip install -r requirements.txt воспроизводимых установок.
Скопируйте следующий код в редактор и сохраните его в файле с именем 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Войдите в Azure на рабочей станции. Вы можете войти с помощью Azure CLI, Azure PowerShell или Azure Developer CLI.
Код аутентификации используется
DefaultAzureCredentialдля аутентификации с Microsoft Entra ID и получения токена, который дает право выполнять операции на вашем экземпляре сервера.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()
Связанный контент
- Краткое руководство. Использование Java и JDBC с базой данных Azure для PostgreSQL
- Краткое руководство. Использование .NET (C#) для подключения и запроса данных в Базе данных Azure для PostgreSQL
- Краткое руководство. Использование языка Go для подключения и запроса данных в Базе данных Azure для PostgreSQL
- Краткое руководство. Использование PHP для подключения и запроса данных в Базе данных Azure для PostgreSQL
- Краткое руководство: подключение и выполнение запросов с помощью Azure CLI к базе данных Azure для PostgreSQL
- Краткое руководство. Импорт данных из Базы данных Azure для PostgreSQL в Power BI