Шаг 3. Подтверждение концепции, подразумевающее подключение к SQL с помощью pymssql
В этом примере показано, как использовать pymssql
концепцию для подключения к базе данных SQL. В этом примере предполагается, что вы используете образец базы данных AdventureWorksLT.
Примечание.
Этот пример следует рассматривать только как подтверждение концепции. Код в этом примере упрощен для удобочитаемости и для него не гарантируется соблюдение рекомендаций корпорации Майкрософт.
Необходимые компоненты
- Python 3
- Если у вас еще нет Python, установите диспетчер пакетов Python и диспетчер пакетов Python (PyPI) из python.org.
- Предпочитаете не использовать собственную среду? Откройте в качестве devcontainer с помощью GitHub Codespaces.
pymssql
пакет из PyPI.- База данных SQL и учетные данные.
Подключение и запрос данных
Подключитесь к базе данных с помощью учетных данных.
Создайте файл с именем app.py.
Добавление документации по модулю.
""" Connects to a SQL database using pymssql """
Импортируйте пакет
pymssql
.import pymssql
Используйте функцию
pymssql.connect
для подключения к базе данных SQL.conn = pymssql.connect( server='<server-address>', user='<username>', password='<password>', database='<database-name>', as_dict=True )
Выполнение запроса
Используйте строку 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() cursor.execute(SQL_QUERY)
Примечание.
Эта функция фактически принимает любой запрос и возвращает результирующий набор, по которому может быть выполнена итерация с использованием cursor.fetchone().
foreach
Используйтеcursor.fetchall
цикл для получения всех записей из базы данных. Затем распечатайте записи.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
.from random import randrange
Создайте случайный номер продукта.
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
Следующие шаги
Центр разработчиков Python.