Как подключиться к SQL Server из Python

В этом руководстве вы узнаете, как подключаться к базам данных SQL Server из Python.

Создание новой базы данных в SQL Server

Мы будем использовать базу данных BookStore. Чтобы создать ее, вы можете следовать этому руководству.

Настройка виртуальной среды

Шаг 1. Создайте каталог проекта, например sqlserver-python:

mkdir sqlserver-python
cd sqlserver-python

Шаг 2. Создание виртуальной среды :

python -m venv venv

Шаг 3. Активируйте виртуальную среду:

venv/scripts/activate

Установка необходимых пакетов

Мы будем использовать два пакета;

  • pymssql – для подключения к SQL Server.
  • python-dotenv для работы с файлом .env, в котором хранятся параметры подключения к базе данных.

Шаг 1. Установите пакеты pymssql и python-dotenv с помощью следующей команды pip:

pip install pymssql python-dotenv

Он установит пакеты pymssql и python-dotenv.

Шаг 2. Создайте файл requirements.txt:

pip freeze > requirements.txt

Он сгенерирует файл requirements.txt, включающий все зависимости проекта:

pymssql==2.3.0
python-dotenv==1.0.1

Обратите внимание, что версии вашего пакета могут быть выше указанных выше.

Подключение к SQL-серверу

Шаг 1. Создайте новый файл .env в каталоге проекта, включающий параметры подключения к SQL Server:

DB_SERVER=localhost
DB_NAME=BookStore
DB_USER=joe
DB_PASSWORD=YourPassword

Файл .env содержит четыре важных параметра базы данных:

  • DB_SERVER – указывает сервер базы данных SQL Server(localhost).
  • DB_NAME – указывает имя базы данных на SQL Server, к которой вы хотите подключиться. В данном случае это BookStore.
  • DB_USER – предоставляет учетную запись пользователя, имеющую достаточные разрешения для подключения к SQL Server.
  • DB_PASSWORD – укажите пароль для пользователя базы данных.

Шаг 2. Создайте новый модуль Python connect.py со следующим кодом:

import os, logging
from pymssql import connect, Connection
from dotenv import load_dotenv
def create_connection() -> Connection | None:
    # read data from .env file
    load_dotenv()
    db_server = os.getenv('DB_SERVER')
    db_user = os.getenv('DB_USER')
    db_password = os.getenv('DB_PASSWORD')
    db_name = os.getenv('DB_NAME')
    # connect to the SQL Server
    try:
        return connect(server=db_server, user=db_user, password=db_password, database=db_name)
    except Exception as e:
        logging.error(f'Error connecting to the SQL Server database: {e}')

В файле connect.py мы определяем функцию create_connnection(), которая загружает параметры подключения к базе данных из файла .env и подключается к SQL Server.

Если соединение с базой данных установлено успешно, функция create_connection() возвращает объект Connection. В противном случае она возвращает None.

Как это работает.

Сначала импортируйте модуль os для получения параметров конфигурации из env и пакета logging для ведения журнала:

import os, logging

Во-вторых, импортируйте функцию подключения и объект подключения из пакета pymssql:

from pymssql import connect, Connection

В-третьих, импортируйте функцию load_dotenv из модуля dotenv:

from dotenv import load_dotenv

В-четвертых, загрузите переменные среды из файла .env, вызвав функцию load_dotenv():

load_dotenv()

В-пятых, считайте переменные среды, включая DB_SERVER, DB_USER, DB_PASSWORD и DB_NAME, используя функцию os.getenv():

db_server = os.getenv('DB_SERVER')
db_user = os.getenv('DB_USER')
db_password = os.getenv('DB_PASSWORD')
db_name = os.getenv('DB_NAME')       

В-шестых, подключитесь к SQL Server, вызвав функцию connect() с соответствующими параметрами базы данных:

connect(server=db_server, user=db_user, password=db_password, database=db_name)

В-седьмых, отобразите ошибку в блоке except, если во время соединения произошла ошибка:

logging.error(f'Error connecting to the SQL Server database: {e}')

Шаг 3. Создайте файл main.py и вызовите функцию create_connection для подключения к SQL Server:

import logging, sys
from connect import create_connection
# config logging to console
logging.basicConfig(
    stream=sys.stdout, 
    encoding='utf-8', 
    format='%(levelname)s:%(message)s',
    level=logging.DEBUG
)
# create a database connection
conn = create_connection()
if conn:
    logging.info('Connected to the SQL Server database successfully.')
    conn.close()

Как это работает.

Сначала импортируйте встроенные модули ведения журналов и sys:

import logging, sys

Во-вторых, импортируйте функцию create_connection из модуля connect:

from connect import create_connection

В-третьих, настройте модуль ведения журнала для записи информации на стандартный вывод, которым в данном случае является терминал:

# config logging to console
logging.basicConfig(
    stream=sys.stdout, 
    encoding='utf-8', 
    format='%(levelname)s:%(message)s',
    level=logging.DEBUG
)

В-четвертых, подключитесь к SQL Server, вызвав функцию create_connection():

conn = create_connection()
if conn:
    logging.info('Connected to the SQL Server database successfully.')
    conn.close()

Если соединение установлено успешно, мы регистрируем информационное сообщение и закрываем соединение с базой данных, вызывая метод close() объекта Connection.

Шаг 4. Откройте терминал и выполните следующую команду для выполнения файла main.py:

python main.py

Если вы видите в терминале следующее, вы успешно подключились к SQL Server:

INFO:Connected to the SQL Server database successfully.

Загрузите исходный код проекта

Загрузите исходный код проекта

Краткое содержание

  • Используйте файл .env для хранения конфигурации базы данных.
  • Используйте пакет python-dotenv для чтения переменных окружений, хранящихся в файле .env.
  • Вызовите функцию connect() пакета pymssql для подключения к SQL Server.

Обратите внимание, что мы повторно используем функцию create_connection() в следующих уроках для подключения к SQL Server.

Мирослав С.

Автор статей, ИБ-специалист