Краткое руководство: подключение к Azure HorizonDB (предварительная версия) с помощью Python и выполнение запросов к данным

В этом кратком руководстве вы подключитесь к экземпляру Azure HorizonDB с помощью Python. Затем вы используете инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных из macOS, Ubuntu Linux и платформ Windows.

Действия, описанные в этой статье, включают проверку подлинности PostgreSQL.

Проверка подлинности PostgreSQL использует учетные записи, хранящиеся в PostgreSQL, и вам нужно самостоятельно управлять сменой паролей.

В этой статье предполагается, что вы знакомы с разработкой с помощью Python, но вы не знакомы с Azure HorizonDB.

Необходимые условия

Добавление правил брандмауэра для рабочей станции клиента

Подготовка среды разработки

Перейдите в папку, в которой необходимо запустить код и создать и активировать виртуальную среду. Виртуальная среда — это автономный каталог для определенной версии Python и других пакетов, необходимых для этого приложения.

Выполните следующие команды, чтобы создать и активировать виртуальную среду:

py -3 -m venv .venv
.venv\Scripts\activate

Установка библиотек Python

Установите библиотеки Python, необходимые для выполнения примеров кода.

Установите модуль psycopg, который позволяет подключаться к базе данных PostgreSQL и запрашивать ее.

# Recommended: install the binary wheel that bundles a compatible libpq wrapper (Windows/macOS)
python -m pip install "psycopg[binary]"

# Linux alternative (if you prefer building against system libpq):
sudo apt-get update
sudo apt-get install -y libpq-dev build-essential python3-dev
python -m pip install psycopg

Добавление кода проверки подлинности

В этом разделе вы добавите код проверки подлинности в рабочий каталог и выполните все дополнительные действия, необходимые для проверки подлинности и авторизации в экземпляре кластера.

Перед добавлением кода проверки подлинности убедитесь, что необходимые пакеты для каждого примера установлены.

Обязательные пакеты (примеры в этой статье):

  • Пример пароля: (рекомендуется: psycopgpython -m pip install "psycopg[binary]")

При необходимости создайте requirements.txt с этими записями и установите с помощью python -m pip install -r requirements.txt для воспроизводимых установок.

  1. Скопируйте следующий код в редактор и сохраните его в файле с именем get_conn.py.

    import urllib.parse
    import os
    
    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'])
    password = os.environ['DBPASSWORD']
    sslmode = os.environ['SSLMODE']
    db_uri = f"host={dbhost} dbname={dbname} user={dbuser} password={password} sslmode={sslmode}"
       # Construct connection URI
       return db_uri
    
  2. Получение сведений о подключении к базе данных.

    Использование портала Azure:

    1. В меню слева на портале Azure выберите Все ресурсы и найдите созданный кластер.

    2. Выберите имя кластера.

    3. В меню ресурсов выберите Обзор. Наведите указатель мыши на значение, отображаемое как первичная конечная точка (чтение и запись) и нажмите кнопку "Копировать в буфер обмена ".

      Снимок экрана, показывающий значение основной конечной точки на странице

    4. Если вы забыли пароль для входа администратора, его можно сбросить с помощью кнопки "Сброс пароля ".

      Снимок экрана: кнопка

  3. Задайте переменные среды для элементов URI подключения:

    set DBHOST=<cluster-name>
    set DBNAME=<database-name>
    set DBUSER=<username>
    set DBPASSWORD=<password>
    set SSLMODE=require
    

Выполнение примеров кода Python

Для каждого примера кода в этой статье сделайте следующее:

  1. Создайте файл в текстовом редакторе.

  2. Добавьте пример кода в файл.

  3. Сохраните файл в папке проекта с расширением PY, например postgres-insert.py. При сохранении файла в ОС Windows обязательно выберите кодировку UTF-8.

  4. В вашей папке проекта введите python, затем имя файла, например python postgres-insert.py.

Создание таблицы и вставка данных

Следующий пример кода подключается к кластеру HorizonDB Azure с помощью функции 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 HorizonDB и использовать метод 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)

Обновление данных

Следующий пример кода подключается к кластеру HorizonDB Azure и использует 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 HorizonDB и использует 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()