Обработка данных MS SQL Server средствами Python

Не всякие данные можно обработать с помощью старого доброго Excel или SQL. Впервые с проблемой нехватки стандартных средств анализа и обработки данных мы столкнулись при разработке модуля для анализа рекламы нашей компании на ТВ. Необходимо было хранить большой объём кадров прямого эфира каналов и информации о них. Поэтому было принято решение о интеграции возможностей языка python c языком SQL.

Для работы импортируем необходимые библиотеки:

import pyodbc

В случае, если данная библиотека отсутствует на устройстве, в командной строке запустите команду:

pip install pyodbc

Данный модуль упрощает доступ к базам данных через программный интерфейс ODBC (Open Database Connectivity).

Далее создаём строку подключения к нашей базе данных:

connectionString = ("Driver = {SQL Server Native Client 11.0};""Server =YOUR SERVER;" "Database = audTv;""Trusted_Connection=yes")

где Driver – драйвер Microsoft ODBC для SQL Server. Обеспечивает возможность подключения к Microsoft SQL Server из Windows.

Server – указание сервера, на котором будут храниться (хранятся) наши таблицы:

Trusted Connection – указывает на способ подключения пользователей к БД. В случае, если указано значение «yes», для проверки подлинности используется учётная запись Windows, а ключи UID и PWD игнорируются, и наоборот, при выборе значения «no».

После заполнения строки подключения данными, выполним соединение к нашей базе данных:

connection = pyodbc.connect(connectionString, autocommit=True)

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

dbCursor = connection.cursor()

Теперь можно написать наш первый запрос! Допустим, у нас есть таблица с данными о книгах, связанных с проектированием баз данных. Данная таблица будет содержать следующие данные: название книги, имя(имена) автора(ов) книги, год издания и краткое описание.

Добавим данные в нашу таблицу с помощью кода на python:

requestString = ””” INSERT INTO Books(name,author,publicationYear,descript) VALUES ('Рефакторинг баз данных. Эволюционное проектирование','Скотт В. Эмблер, Прамодкумар Дж. Садаладж',2007,'В книге представлены советы по улучшению кода для баз данных'), ('Базы данных. Проектирование и разработка','Рэймонд Фрост, Джон Дей, Крейг Ван Слайк',2007,'Довольно популярная книга по проектированию и рефакторингу') ””” dbCursor.execute(requestString) connection.commit()

Проверим нашу таблицу (для проверки использовался SQL Server Management Studio):

Наш запрос успешно выполнен, но стоит отметить, что возможности использования библиотеки pyodbc не ограничиваются заполнением таблиц данными. Попробуем выбрать данные из нашей таблицы:

requestString2 = ”””select name,author from Books where publicationYear=2007””” dbCursor.execute(requestString) for row in dbCursor: print(“Название книги: ” + row.name + “Автор(ы) книги: ” + row.author)

Результат работы программы:

Так же есть возможность сохранения результата запроса в объект DataFrame, для дальнейшей обработки средствами библиотеки pandas:

import pandas as pd from IPython.display import display df = pd.read_sql_query(requestString,connection) display(df.head())

Результат работы программы:

Таким образом, сегодня мы научились с помощью скриптов на языке python посредством библиотеки pyodbc создавать запросы для работы с SQL серверами, что может быть использовано для удобства работы с данными в повседневной деятельности аудитора.

0
5 комментариев
Alexander Ponomarev

Интересненько, попробую, спасибо.

Ответить
Развернуть ветку
NTA
Автор

Alexander, спасибо!

Ответить
Развернуть ветку
Алексей Nein

тоесть Вы предлагаете использовать raw sql запросы место какой-нибудь orm? а как же сложные join'ы и subquery?

Ответить
Развернуть ветку
NTA
Автор

Алексей, спасибо за ваш комментарий. В статье рассматриваем один из подходов по взаимодействию с данными. ORM не всегда используем, они усложняют работу с реляционными БД, скрывают SQL за обертками из сложных конструкций собственных объектов.

Ответить
Развернуть ветку
Алексей Nein

тогда проще вьюхи на бд создать)))

Ответить
Развернуть ветку
2 комментария
Раскрывать всегда