Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве описано, как подключить скрипт Python к базе данных, созданной и загруженной с примерами данных.
pymssql
Драйвер для Python используется для подключения к базе данных и выполнения основных операций, таких как чтение и запись данных.
Документация по pymssql | Исходный код pymssql | Пакет (PyPi)
Предпосылки
Python 3
Если у вас еще нет Python, установите Python runtime и диспетчер пакетов Python Package Index (PyPI) с python.org.
Предпочитаете не использовать собственную среду? Откройте в качестве devcontainer с помощью GitHub Codespaces.
pymssql
пакет из PyPI.База данных в базе данных SQL Server, базе данных Azure SQL или базе данных SQL в Fabric с примерной схемой
AdventureWorks2022
и допустимой строкой подключения.
Настройка
Выполните следующие действия, чтобы настроить среду разработки для разработки приложения с помощью pymssql
драйвера Python.
Замечание
Этот драйвер использует протокол табличного потока данных (TDS ), который включен по умолчанию в SQL Server, базе данных SQL в Fabric и Базе данных SQL Azure. Дополнительная конфигурация не требуется.
Установка пакета pymssql
pymssql
Получите пакет из PyPI.
Откройте командную строку в пустом каталоге.
Установите пакет
pymssql
.pip install pymssql
Установка пакета python-dotenv
Получите python-dotenv
из PyPI.
В том же каталоге установите
python-dotenv
пакет.pip install python-dotenv
Проверка установленных пакетов
Средство командной строки PyPI можно использовать для проверки установки предполагаемых пакетов.
Проверьте список установленных пакетов при помощи
pip list
.pip list
Создание базы данных SQL
В этом кратком руководстве требуется облегченная схема AdventureWorks2022 на Microsoft SQL Server, базе данных SQL в Fabric или базе данных Azure SQL.
Запустите код
Создание нового файла
Создайте файл с именем
app.py
.Добавьте строку документации для модуля.
""" Connects to a SQL database using pymssql """
Импорт пакетов, включая
pymssql
.from os import getenv from dotenv import load_dotenv from pymssql import connect
Используйте функцию
pymssql.connect
для подключения к базе данных SQL.load_dotenv() conn = connect(getenv("SQL_SERVER"),getenv("SQL_USER"),getenv("SQL_PASSWORD"),getenv("SQL_DATABASE"))
В текущем каталоге создайте новый файл с именем
.env
.В файле
.env
добавьте записи для значений строки подключения с именамиSQL_SERVER
,SQL_USER
,SQL_PASSWORD
,SQL_DATABASE
. Замените заполнители здесь фактическими значениями строки подключения.SQL_SERVER="<server_name>" SQL_USER="<sql_user_name>" SQL_PASSWORD="<sql_user_password>" SQL_DATABASE="<sql_database>"
Подсказка
Строка подключения, используемая здесь, в значительной степени зависит от типа базы данных SQL, к которой вы подключаетесь. Дополнительные сведения о строках подключения и их синтаксисе см. в разделе Атрибуты подключения FreeTDS.
Выполнение запроса
Используйте строку SQL-запроса для выполнения запроса и анализа результатов.
Создайте переменную для строки запроса 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(as_dict=True) cursor.execute(SQL_QUERY)
Замечание
Эта функция по сути принимает любой запрос и возвращает результирующий набор, который можно переитерировать с помощью cursor.fetchone().
Используйте цикл
foreach
, чтобы получить все записи из базы данных. Затем распечатайте записи.for r in cursor: 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)
Подсказка
Создание случайного номера продукта здесь гарантирует, что этот пример можно запустить несколько раз.
Создайте строку инструкции SQL.
SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (%s, %s, %s, %s, CURRENT_TIMESTAMP) """
Выполните инструкцию с помощью
cursor.execute
.cursor.execute( SQL_STATEMENT, ( f'Example Product {productNumber}', f'EXAMPLE-{productNumber}', 100, 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
Следующий шаг
Посетите репозиторий pymssql
драйверов GitHub, чтобы получить дополнительные примеры, чтобы внести идеи или сообщить о проблемах.