Подключение к и запрос База данных SQL Azure с помощью Python и драйвера pyodbc
Применимо к: База данных SQL Azure
В этом кратком руководстве описывается, как подключить приложение к базе данных в База данных SQL Azure и выполнять запросы с помощью Python и драйвера SQL Python — pyodbc. В этом кратком руководстве описан рекомендуемый подход без пароля для подключения к базе данных. Дополнительные сведения о бессерверных подключениях можно узнать в центре без пароля.
Необходимые компоненты
- Подписка Azure
- База данных SQL Azure, настроенная с проверкой подлинности Microsoft Entra. Вы можете создать базу данных с помощью краткого руководства по созданию базы данных.
- Последняя версия Azure CLI.
- Visual Studio Code с расширением Python.
- Python 3.8 или более поздней версии. Если вы используете клиентский компьютер Linux, см. раздел "Установка драйвера ODBC".
Настройка базы данных
Безопасные, бессерверные подключения к База данных SQL Azure требуют определенных конфигураций базы данных. Проверьте следующие параметры на логическом сервере в Azure, чтобы правильно подключиться к База данных SQL Azure в локальных и размещенных средах:
Для локальных подключений разработки убедитесь, что логический сервер настроен, чтобы разрешить подключение ip-адреса локального компьютера и других служб Azure:
Перейдите на страницу "Сеть " сервера.
Переключите переключатель "Выбранные сети", чтобы отобразить дополнительные параметры конфигурации.
Выберите " Добавить ip-адрес клиента" (xx.xx.xx.xx.xx), чтобы добавить правило брандмауэра, которое будет включать подключения с адреса IPv4 локального компьютера. Кроме того, можно выбрать + Добавить правило брандмауэра, чтобы ввести конкретный IP-адрес.
Убедитесь, что установлен флажок разрешить службам и ресурсам Azure доступ к этому серверу .
Предупреждение
Включение доступа к этому параметру сервера служб и ресурсов Azure не является рекомендуемой практикой безопасности для рабочих сценариев. Реальные приложения должны реализовать более безопасные подходы, такие как более строгие ограничения брандмауэра или конфигурации виртуальной сети.
Дополнительные сведения о конфигурациях безопасности базы данных см. в следующих ресурсах:
- Настройте правила брандмауэра База данных SQL Azure.
- Настройте виртуальную сеть с частными конечными точками.
На сервере также должна быть включена проверка подлинности Microsoft Entra и назначена учетная запись администратора Microsoft Entra. Для локальных подключений к разработке учетная запись администратора Microsoft Entra должна быть учетной записью, с помощью azure CLI или Visual Studio. Вы можете проверить, включена ли проверка подлинности Microsoft Entra на странице идентификатора Microsoft Entra на логическом сервере.
Если вы используете личную учетную запись Azure, убедитесь, что настроена настройка Microsoft Entra и настроена для База данных SQL Azure, чтобы назначить свою учетную запись администратором сервера. Если вы используете корпоративную учетную запись, идентификатор Microsoft Entra, скорее всего, будет настроен для вас.
Создание проекта
Создайте проект Python с помощью Visual Studio Code.
Откройте Visual Studio Code и создайте новую папку для проекта и измените его.
mkdir python-sql-azure cd python-sql-azure
Создайте виртуальную среду для приложения.
py -m venv .venv .venv\scripts\activate
Создайте новый файл Python с именем
app.py
.
Установка драйвера pyodbc
Чтобы подключиться к База данных SQL Azure с помощью Python, установите pyodbc
драйвер. Этот пакет выступает в качестве поставщика данных для подключения к базам данных, выполнения команд и получения результатов. В этом кратком руководстве также вы устанавливаете flask
и pydantic
uvicorn
пакеты для создания и запуска API.
Дополнительные сведения и конкретные инструкции по установке pyodbc
драйвера во всех операционных системах см. в разделе "Настройка среды разработки для разработки pyodbc Python".
Создайте файл requirements.txt со следующими строками:
pyodbc fastapi uvicorn[standard] pydantic azure-identity
Установите требования.
pip install -r requirements.txt
Настройка локального строка подключения
Для локальной разработки и подключения к База данных SQL Azure добавьте следующую AZURE_SQL_CONNECTIONSTRING
переменную среды. Замените <database-server-name>
<database-name>
заполнители собственными значениями. Примеры переменных среды отображаются для оболочки Bash.
Интерактивная проверка подлинности предоставляет параметр без пароля при локальном запуске. Этот параметр рекомендуется, так как вам не нужно хранить секреты проверки подлинности или управлять ими в локальной системе.
В Windows интерактивная проверка подлинности Microsoft Entra может использовать технологию многофакторной проверки подлинности Microsoft Entra для настройки подключения. В этом режиме, указав идентификатор входа, запускается диалоговое окно проверки подлинности Azure и позволяет пользователю вводить пароль для завершения подключения.
export AZURE_SQL_CONNECTIONSTRING='Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
Дополнительные сведения см. в разделе "Использование идентификатора Записи Майкрософт" с драйвером ODBC. Если вы используете этот параметр, найдите окно, которое запрашивает учетные данные.
Сведения о создании строка подключения можно получить из портал Azure:
Перейдите на сервер SQL Server Azure, выберите страницу баз данных SQL, чтобы найти имя базы данных и выбрать базу данных.
В базе данных перейдите на страницу строк подключения, чтобы получить строка подключения сведения. Перейдите на вкладку ODBC .
Примечание.
Если вы установили Azure Arc и связали его с подпиской Azure, вы также можете использовать подход к управляемому удостоверению, показанный для приложения, развернутого в Служба приложений.
Добавление кода для подключения к База данных SQL Azure
В папке проекта создайте файл app.py и добавьте пример кода. Этот код создает API, который:
- Извлекает База данных SQL Azure строка подключения из переменной среды.
- Создает таблицу
Persons
в базе данных во время запуска (только для сценариев тестирования). - Определяет функцию для получения всех
Person
записей из базы данных. - Определяет функцию для получения одной
Person
записи из базы данных. - Определяет функцию для добавления новых
Person
записей в базу данных.
import os
import pyodbc, struct
from azure import identity
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
class Person(BaseModel):
first_name: str
last_name: Union[str, None] = None
connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"]
app = FastAPI()
@app.get("/")
def root():
print("Root of Person API")
try:
conn = get_conn()
cursor = conn.cursor()
# Table should be created ahead of time in production app.
cursor.execute("""
CREATE TABLE Persons (
ID int NOT NULL PRIMARY KEY IDENTITY,
FirstName varchar(255),
LastName varchar(255)
);
""")
conn.commit()
except Exception as e:
# Table may already exist
print(e)
return "Person API"
@app.get("/all")
def get_persons():
rows = []
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM Persons")
for row in cursor.fetchall():
print(row.FirstName, row.LastName)
rows.append(f"{row.ID}, {row.FirstName}, {row.LastName}")
return rows
@app.get("/person/{person_id}")
def get_person(person_id: int):
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM Persons WHERE ID = ?", person_id)
row = cursor.fetchone()
return f"{row.ID}, {row.FirstName}, {row.LastName}"
@app.post("/person")
def create_person(item: Person):
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute(f"INSERT INTO Persons (FirstName, LastName) VALUES (?, ?)", item.first_name, item.last_name)
conn.commit()
return item
def get_conn():
credential = identity.DefaultAzureCredential(exclude_interactive_browser_credential=False)
token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
SQL_COPT_SS_ACCESS_TOKEN = 1256 # This connection option is defined by microsoft in msodbcsql.h
conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
return conn
Предупреждение
В примере кода показаны необработанные инструкции SQL, которые не следует использовать в рабочем коде. Вместо этого используйте пакет реляционного сопоставителя объектов (ORM), например SqlAlchemy , который создает более безопасный уровень объектов для доступа к базе данных.
Локальный запуск и проверка приложения
Приложение готово к локальному тестированию.
app.py
Запустите файл в Visual Studio Code.uvicorn app:app --reload
На странице пользовательского интерфейса Swagger для приложения http://127.0.0.1:8000/docsразверните метод POST и выберите "Попробовать".
Вы также можете использовать / redoc , чтобы просмотреть другую форму созданной документации для API.
Измените пример JSON, чтобы включить значения для имени и фамилии. Выберите "Выполнить" , чтобы добавить новую запись в базу данных. API возвращает успешный ответ.
Разверните метод GET на странице пользовательского интерфейса Swagger и выберите "Попробовать". Выберите "Выполнить" и возвращается только что созданный пользователь.
Развертывание в Службу приложений Azure
Приложение готово к развертыванию в Azure.
Создайте файл start.sh, чтобы gunicorn в службе приложение Azure может запускать uvicorn. Start.sh имеет одну строку:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app
Используйте az webapp up для развертывания кода в Служба приложений. (Этот параметр
-dryrun
можно использовать для просмотра того, что выполняет команда, не создавая ресурс.)az webapp up \ --resource-group <resource-group-name> \ --name <web-app-name>
Используйте команду az webapp config set, чтобы настроить Служба приложений для использования файла start.sh.
az webapp config set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --startup-file start.sh
Используйте команду az webapp identity assign, чтобы включить управляемое удостоверение, назначаемое системой, для Служба приложений.
az webapp identity assign \ --resource-group <resource-group-name> \ --name <web-app-name>
В этом кратком руководстве для демонстрации используется управляемое удостоверение, назначаемое системой. Управляемое удостоверение, назначаемое пользователем, более эффективно в более широком спектре сценариев. Дополнительные сведения см . в рекомендациях по рекомендациям по управляемому удостоверению. Пример использования управляемого удостоверения, назначаемого пользователем, с pyodbc см. в статье "Миграция приложения Python на использование бессерверных подключений с База данных SQL Azure".
Подключение Служба приложений к База данных SQL Azure
В разделе "Настройка базы данных" настроена сеть и проверка подлинности Microsoft Entra для сервера базы данных SQL Azure. В этом разделе описана настройка базы данных и настройка Служба приложений с помощью строка подключения для доступа к серверу базы данных.
Для выполнения этих команд можно использовать любое средство или интегрированную среду разработки, которые могут подключаться к База данных SQL Azure, включая SQL Server Management Studio (SSMS), Azure Data Studio и Visual Studio Code с расширением mssql SQL Server. Кроме того, можно использовать портал Azure, как описано в кратком руководстве. Используйте редактор запросов портал Azure для запроса База данных SQL Azure.
Добавьте пользователя в База данных SQL Azure с командами SQL, чтобы создать пользователя и роль для доступа без пароля.
CREATE USER [<web-app-name>] FROM EXTERNAL PROVIDER ALTER ROLE db_datareader ADD MEMBER [<web-app-name>] ALTER ROLE db_datawriter ADD MEMBER [<web-app-name>]
Дополнительные сведения см. в статье Пользователи автономной базы данных — создание переносимой базы данных. Пример, показывающий тот же принцип, но примененный к виртуальной машине Azure, см. в руководстве . Использование управляемого удостоверения, назначаемого системой Виртуальной машины Windows, для доступа к SQL Azure. Дополнительные сведения о назначенных ролях см. в разделе "Роли фиксированной базы данных".
Если отключить и включить управляемое удостоверение, назначаемое системой, Служба приложений, удалите его и повторно создайте. Запустите и повторно запустите
DROP USER [<web-app-name>]
CREATE
команды иALTER
команды. Чтобы просмотреть пользователей, используйтеSELECT * FROM sys.database_principals
.Используйте команду az webapp config appsettings set, чтобы добавить параметр приложения для строка подключения.
az webapp config appsettings set \ --resource-group <resource-group-name> \ --name <web-app-name> \ --settings AZURE_SQL_CONNECTIONSTRING="<connection-string>"
Для развернутого приложения строка подключения должны выглядеть следующим образом:
Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30
<dabaser-server-name>
Заполните значения и<database-name>
значения.Без пароля строка подключения не содержит имя пользователя или пароль. Вместо этого, когда приложение выполняется в Azure, код используется
DefaultAzureCredential
из библиотеки удостоверений Azure для получения маркера для использованияpyodbc
.
Тестирование развернутого приложения
Перейдите по URL-адресу приложения, чтобы проверить, работает ли подключение к База данных SQL Azure. URL-адрес приложения можно найти на странице обзора Служба приложений.
https://<web-app-name>.azurewebsites.net
Добавьте /docs к URL-адресу, чтобы просмотреть пользовательский интерфейс Swagger и проверить методы API.
Поздравляем! Теперь приложение подключено к База данных SQL Azure как в локальных, так и в размещенных средах.
Связанный контент
- Перенос приложения Python на использование бессерверных подключений с База данных SQL Azure — отображает управляемое удостоверение, назначаемое пользователем.
- Бессерверные подключения для служб Azure
- Рекомендации по управляемых удостоверениях