Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве описано, как подключить скрипт Python к базе данных, созданной и загруженной с примерами данных. Вы используете драйвер mssql-python для Python для подключения к вашей базе данных и выполнения базовых операций, таких как чтение и запись данных.
Драйвер mssql-python не требует внешних зависимостей на компьютерах Windows. Драйвер устанавливает все, что требуется с одной pip установкой, что позволяет использовать самую последнюю версию драйвера в новых сценариях без нарушения работы других сценариев, для обновления и тестирования которых у вас нет времени.
Используйте пример локальной SQL-аутентификации в этой статье только для локальной разработки на инстансе SQL Server, которым вы управляете. При работе с База данных SQL Azure, базами данных SQL в Fabric, совместно используемыми средами разработки, CI и производственными развертываниями начните с аутентификации Microsoft Entra или другого бесспарольного метода аутентификации.
mssql-python документация | mssql-python исходный код | Пакет (PyPI) | Visual Studio Code
Предпосылки
Python 3.10 или более поздней версии.
Если у вас еще нет Python, установите среду выполнения Python и диспетчер пакетов pip из python.org.
Не хотите использовать собственную среду? Следуйте инструкциям в разделе Контейнерная и локальная разработка, чтобы создать воспроизводимую среду разработки в devcontainer или GitHub Codespaces.
(По желанию) Azure Интерфейс командной строки (CLI).
Создайте базу данных или подключитесь к существующей базе данных в SQL Server, База данных SQL Azure или в базе данных SQL в Fabric. Используйте следующие шаги, чтобы настроить базу данных с примерной схемой AdventureWorks2025, и сохраните строку подключения для дальнейшего использования.
Создание базы данных SQL
Создайте или подключитесь к SQL-базе данных на одной из следующих платформ:
Настройка
Выполните следующие действия, чтобы настроить среду разработки для разработки приложения с помощью mssql-python драйвера Python.
Замечание
Этот драйвер использует протокол Tabular Data Stream (TDS ). SQL Server, SQL Database in Fabric и База данных SQL Azure по умолчанию включают TDS, поэтому дополнительная настройка не требуется.
Предварительные требования для установки операционной системы
Установите единовременные предварительные условия для операционной системы. Пользователи Windows могут пропустить этот шаг. Для полной информации о платформе см. Установить mssql-python.
apk add libtool krb5-libs krb5-dev libstdc++
Установка пакета mssql-python
mssql-python Получите пакет из PyPI.
Откройте командную строку в пустом каталоге.
Установите пакет
mssql-python.pip install mssql-python
Установите пакет python-dotenv
Получите пакет python-dotenv из PyPI.
В том же каталоге установите python-dotenv пакет.
pip install python-dotenv
Проверка установленных пакетов
Используйте pip list для проверки, что нужные пакеты установлены.
pip list
Запустите код
Создание нового файла
Создайте файл с именем
app.py.Добавьте строку документации для модуля.
""" Connects to a SQL database using mssql-python """Импорт пакетов, включая
mssql-python.from os import getenv from dotenv import load_dotenv from mssql_python import connectИспользуйте функцию
mssql-python.connectдля подключения к базе данных SQL.load_dotenv() conn = connect(getenv("SQL_CONNECTION_STRING"))В текущем каталоге создайте новый файл с именем
.env.В файле
.envдобавьте запись для строки подключения с именемSQL_CONNECTION_STRING. Используйте один из следующих примеров и замените заполняющие значения на ваши реальные значения.Для База данных SQL Azure или SQL Database in Fabric начните с аутентификации Microsoft Entra:
SQL_CONNECTION_STRING="Server=<server>;Database=<database>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"Для локального SQL Server в процессе разработки начинайте с SQL-аутентификации:
SQL_CONNECTION_STRING="Server=localhost,1433;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=yes;TrustServerCertificate=yes"Предостережение
Воспринимайте
.envэто как удобство локальной разработки, а не как механизм развертывания. Никогда не коммитируйте его, никогда не используйте этот образец аутентификации SQL в общих или производственных средах, и поддерживайте включённую проверку сертификатов вне локальной разработки.Используйте строки соединения для адаптации сэмпла под именованные экземпляры, контейнеры или расширенные настройки. Если вы подключаетесь к База данных SQL Azure или SQL Database в Fabric, используйте аутентификацию Microsoft Entra для доступа без пароля и интерактивного входа. Для более широких рекомендаций по секретам и сертификатам см. лучшие практики безопасности.
Подсказка
На macOS, оба
ActiveDirectoryInteractiveиActiveDirectoryDefaultработают для проверки подлинности Microsoft Entra.ActiveDirectoryInteractiveзапрашивает вход при каждом запуске скрипта. Чтобы избежать повторяющихся запросов при входе, войдите один раз с помощью команды Azure CLIaz loginи используйте командуActiveDirectoryDefault.ActiveDirectoryDefaultповторно использует кэшированные учетные данные.
Выполнение запроса
Используйте строку запроса Transact-SQL (T-SQL) для выполнения запроса и анализа результатов.
Создайте переменную для строки запроса T-SQL.
SQL_QUERY = """ SELECT TOP 5 c.CustomerID, c.CompanyName, COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC; """Используется
cursor.executeдля извлечения результирующих наборов из запроса к базе данных.cursor = conn.cursor() cursor.execute(SQL_QUERY)Замечание
Эта функция принимает любой запрос и возвращает набор результатов. Для повторения набора результатов используйте cursor.fetchone().
Используйте
cursor.fetchallс цикломforдля получения всех записей из базы данных. Затем распечатайте записи.records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")Сохраните
app.pyфайл.Откройте терминал и протестируйте приложение.
python app.pyНиже приведены ожидаемые выходные данные.
29485 1 Professional Sales and Service 29531 1 Remarkable Bike Store 29546 1 Bulk Discount Store 29568 1 Coalition Bike Company 29584 1 Futuristic Bikes
Вставить строку как транзакцию
Безопасно выполните инструкцию INSERT и передайте параметры. Передача параметров в качестве значений защищает приложение от атак внедрения SQL .
Добавьте импорт
randrangeиз библиотекиrandomв началоapp.py.from random import randrangeВ конце
app.pyдобавьте код для генерации случайного номера продукта.productNumber = randrange(1000)Подсказка
Случайный номер продукта снижает вероятность ошибки дублирования ключа при запуске этого примера более одного раза.
Создайте строку оператора T-SQL.
SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (%(name)s, %(product_number)s, %(standard_cost)s, %(list_price)s, CURRENT_TIMESTAMP) """Выполните инструкцию с помощью
cursor.execute.cursor.execute( SQL_STATEMENT, { 'name': f'Example Product {productNumber}', 'product_number': f'EXAMPLE-{productNumber}', 'standard_cost': 100, 'list_price': 200 } )Извлеките один результат с помощью
cursor.fetchone, распечатайте уникальный идентификатор результата, а затем зафиксируйте операцию в виде транзакции с помощьюconnection.commit.result = cursor.fetchone() print(f"Inserted Product ID : {result.ProductID}") conn.commit()Подсказка
При необходимости можно использовать
connection.rollbackдля отката транзакции.Закройте курсор и подключение с помощью
cursor.closeиconnection.close.cursor.close() conn.close()Сохраните
app.pyфайл и снова протестируйте приложение.python app.pyНиже приведены ожидаемые выходные данные.
Inserted Product ID : 1001