Skip to content

Как, используя Python, подключиться к SQL Server и выполнить запрос

Пересказ статьи Haq Nawaz. How to Connect & Query SQL Server using Python


Сегодня я расскажу, как подключиться к базам данных SQL, используя Python. Это распространенный вопрос, который возникает в серии ETL. Поэтому я решил рассмотреть его и направлять посетителей сюда, если у них возникнут проблемы с подключением.

Эта установка SQL Server позволит нам:

  • Установить подключение к базе данных SQL Server из Python

  • Выполнять запросы к базе данных SQL Server

  • Извлекать и сохранять данные в фрейме данных

Весь код доступен на GitHub. Сопутствующее видео руководство доступно на YouTube.

Предварительно вам нужно установить и сконфигурировать SQL Server. Об этом здесь. Мы также будем использовать Jupyter notebook для отладки подключения к базе данных. Установку Jupyter notebook можно посмотреть на видео-ролике.

Для SQL Server мы используем SQL Server Native Client 11. Его можно загрузить отсюда. Просто загрузите установщик и выполните установку с параметрами по умолчанию. Можно проверить в редакторе регистра, что SQL Server Native Client установлен. Ключ регистра будет находиться здесь:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Native Client 11.0\CurrentVersion

Если с установкой покончено, давайте запустим Jupyter notebook. Для подключения к базе данных SQL Server мы используем библиотеку pyodbc. Мы можем установить ее с помощью команды pip.

Pip install pyodbc

Эта команда установит библиотеку на нашу машину. Теперь мы можем импортировать ее в наш блокнот. Кроме того, давайте импортируем библиотеку pandas, чтобы мы могли читать данные и сохранять их в табличной структуре.

import pyodbc
import pandas as pd

Определяем переменные для хранения учетных данных и сведений о базе данных. Используем функцию connect из библиотеки pyodbc для установки соединения с базой данных.

#имя пользователя базы данных. Используйте конфигурационный файл 
# или переменные окружения
uid = "etl"
#пароль базы данных. Используйте конфигурационный файл
# или переменные окружения
pwd = "demopass"
driver = "{SQL Server Native Client 11.0}"
server = "localhost" # или имя вашего компьютера
database = "AdventureWorksDW2019;"

В функции connect мы конкатенируем переменную для создания строки подключения. Поскольку мы установили версию SQL Server Express, то именем экземпляра по умолчанию является SQLExpress. Если у вас установлена стандартная редакция или Developer Edition, то вам не требуется указывать экземпляр после имени сервера.

conn = pyodbc.connect('DRIVER=' + driver + ';SERVER=' + server + '\SQLEXPRESS' + ';DATABASE=' + database + ';UID=' + uid + ';PWD=' + pwd)

Нам требуется запрос SQL для тестирования подключения к указанной базе данных SQL Server. Давайте пошлем простой оператор SELECT для получения каких-нибудь данных из нашей базы данных.

sql = "SELECT * FROM [dbo].[DimProductCategory]"

Теперь мы можем использовать функцию запроса на чтение SQL в pandas для выполнения запроса к базе данных. У нас есть все необходимое для этой функции. Мы предоставляем это в переменной sql (запрос SQL) и переменной conn (информация для подключения).

df = pd.read_sql_query(sql, conn)
df.head()

Выполним ячейку блокнота с помощью клавиш SHIFT+ENTER. Если ячейка выполняется без ошибок, то вы успешно все завершили и можете продолжить создавать конвейеры ETL.

Наиболее частой ошибкой является отсутствие Native client. Проверьте его установку. Затем может быть выключен протокол TCP/IP. В этом случае откройте менеджер конфигурации SQL Server и выберите конфигурацию сети. Убедитесь, что протокол TCP/IP включен. Если нет, щелкните правой кнопкой и включите его. После внесения изменений не забудьте перезапустить службу SQL Server.

Ссылки по теме
1. Импорт данных из файла Excel в базу данных SQL Server с помощью Python
2. Краткое руководство по запуску кода Python в SQL Server

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.