Быстрый старт: Подключение к базе данных SQL из блокнота Jupyter

В этом быстром старте используйте Jupyter Notebook в Visual Studio Code, чтобы быстро получать бизнес-аналитику. Используйте mssql-python драйвер для Python, чтобы подключиться к вашей SQL-базе данных, прочитать данные и затем отформатировать их для использования в письмах, отчетах и презентациях.

Драйвер mssql-python не требует внешних зависимостей на компьютерах Windows. Драйвер устанавливает все, что требуется с одной pip установкой, что позволяет использовать самую последнюю версию драйвера в новых сценариях без нарушения работы других сценариев, для обновления и тестирования которых у вас нет времени.

mssql-python документация | mssql-python исходный код | Пакет (PyPI) | Visual Studio Code

Предпосылки


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

Создайте или подключитесь к SQL-базе данных на одной из следующих платформ:

Создание проекта и запуск кода

Создание нового проекта

  1. Откройте командную строку в каталоге разработки. Если у вас его нет, создайте новую директорию, например python или scripts. Избегайте папок на OneDrive, так как синхронизация может мешать управлению виртуальной средой.

  2. Создайте новый проект с uv.

    uv init jupyter-notebook-qs
    cd jupyter-notebook-qs
    

Добавление зависимостей

В том же каталоге установите mssql-python,python-dotenvrich, pandasи matplotlib пакеты. Затем добавьте ipykernel и uv в качестве зависимостей разработки. VS Code требует ipykernel для запуска ячеек блокнота и uv для управления пакетами из ячеек блокнота.

uv add mssql-python python-dotenv rich pandas matplotlib
uv add --dev ipykernel
uv add --dev uv

Запустите Visual Studio Code.

В том же каталоге выполните следующую команду.

code .

Обновление pyproject.toml

  1. Pyproject.toml содержит метаданные проекта.

  2. Обновите описание, чтобы быть более описательным.

    description = "A quick example using the mssql-python driver and Jupyter Notebooks."
    
  3. Сохраните и закройте файл.

Сохранение строки подключения

  1. .gitignore Откройте файл и добавьте исключение для .env файлов. Файл должен быть похож на этот пример. Не забудьте сохранить и закрыть его после завершения.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. В текущем каталоге создайте новый файл с именем .env.

  3. В файле .env добавьте запись для строки подключения с именем SQL_CONNECTION_STRING. Замените пример фактическим значением строки подключения.

    SQL_CONNECTION_STRING="Server=<server_name>;Database=<database_name>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    Подсказка

    Строка подключения, используемая здесь, в значительной степени зависит от типа базы данных SQL, к которой вы подключаетесь. Если вы подключаетесь к базе данных SQL Azure или базе данных SQL в Fabric, используйте строку подключения ODBC на вкладке строк подключения. Возможно, вам потребуется настроить тип проверки подлинности в зависимости от вашего сценария. Дополнительные сведения о строках подключения и их синтаксисе см. в справочнике по синтаксису строки подключения.

Создание записной книжки Jupyter

  1. Выберите "Файл", а затем "Создать файл " и "Записная книжка Jupyter" из списка. Откроется новая записная книжка.

  2. Выберите файл, а затем сохраните как... и присвойте новой записной книжке имя.

  3. Добавьте следующие импорты в первую ячейку.

    from os import getenv
    from mssql_python import connect
    from dotenv import load_dotenv
    from rich.console import Console
    from rich.table import Table
    import pandas as pd
    import matplotlib.pyplot as plt
    
  4. Нажмите кнопку +Markdown в верхней части записной книжки, чтобы добавить новую ячейку Markdown.

  5. Добавьте следующий текст в новую ячейку Markdown.

    ## Define queries for use later
    
  6. Установите галочку на панели инструментов ячейки или используйте сочетание клавиш Ctrl+Enter или Shift+Enter, чтобы отобразить ячейку Markdown.

  7. Нажмите кнопку +Code в верхней части записной книжки, чтобы добавить новую ячейку кода.

  8. Добавьте следующий код в новую ячейку кода.

    SQL_QUERY_ORDERS_BY_CUSTOMER = """
    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;
    """
    
    SQL_QUERY_SPEND_BY_CATEGORY = """
    select top 10
    pc.Name as ProductCategory,
    SUM(sod.OrderQty * sod.UnitPrice) as Spend
    from SalesLT.SalesOrderDetail sod
    inner join SalesLT.SalesOrderHeader soh on sod.salesorderid = soh.salesorderid
    inner join SalesLT.Product p on sod.productid = p.productid
    inner join SalesLT.ProductCategory pc on p.ProductCategoryID = pc.ProductCategoryID
    GROUP BY pc.Name
    ORDER BY Spend;
    """
    

Отображение результатов в таблице

  1. Нажмите кнопку +Markdown в верхней части записной книжки, чтобы добавить новую ячейку Markdown.

  2. Добавьте следующий текст в новую ячейку Markdown.

    ## Print orders by customer and display in a table
    
  3. Установите галочку на панели инструментов ячейки или используйте сочетание клавиш Ctrl+Enter или Shift+Enter, чтобы отобразить ячейку Markdown.

  4. Нажмите кнопку +Code в верхней части записной книжки, чтобы добавить новую ячейку кода.

  5. Добавьте следующий код в новую ячейку кода.

    load_dotenv()
    with connect(getenv("SQL_CONNECTION_STRING")) as conn: # type: ignore
        with conn.cursor() as cursor:
            cursor.execute(SQL_QUERY_ORDERS_BY_CUSTOMER)
            if cursor:
                table = Table(title="Orders by Customer")
                # https://rich.readthedocs.io/en/stable/appendix/colors.html
                table.add_column("Customer ID", style="bright_blue", justify="center")
                table.add_column("Company Name", style="bright_white", justify="left")
                table.add_column("Order Count", style="bold green", justify="right")
    
                records = cursor.fetchall()
    
                for r in records:
                    table.add_row(f"{r.CustomerID}",
                                    f"{r.CompanyName}", f"{r.OrderCount}")
    
                Console().print(table)
    

    Подсказка

    На macOS, оба ActiveDirectoryInteractive и ActiveDirectoryDefault работают для проверки подлинности Microsoft Entra. ActiveDirectoryInteractive запрашивает вход при каждом запуске скрипта. Чтобы избежать повторных запросов при входе, войдите один раз через Azure CLI, запустив az login, затем используйте ActiveDirectoryDefault, который повторно использует кэшированный учетный код.

  6. Нажмите кнопку "Запустить все" в верхней части записной книжки, чтобы запустить её.

  7. При появлении запроса выберите ядро jupyter-notebook-qs .

Отображение результатов на диаграмме

  1. Просмотрите выходные данные последней ячейки. Вы увидите таблицу с тремя столбцами и пятью строками.

  2. Нажмите кнопку +Markdown в верхней части записной книжки, чтобы добавить новую ячейку Markdown.

  3. Добавьте следующий текст в новую ячейку Markdown.

    ## Display spend by category in a horizontal bar chart
    
  4. Установите галочку на панели инструментов ячейки или используйте сочетание клавиш Ctrl+Enter или Shift+Enter, чтобы отобразить ячейку Markdown.

  5. Нажмите кнопку +Code в верхней части записной книжки, чтобы добавить новую ячейку кода.

  6. Добавьте следующий код в новую ячейку кода.

    with connect(getenv("SQL_CONNECTION_STRING")) as conn: # type: ignore
        data = pd.read_sql_query(SQL_QUERY_SPEND_BY_CATEGORY, conn)
        # Set the style - use print(plt.style.available) to see all options
        plt.style.use('seaborn-v0_8-notebook')
        plt.barh(data['ProductCategory'], data['Spend'])
    
  7. Нажмите кнопку "Выполнить ячейку " или Ctrl+Alt+Enter для запуска ячейки.

  8. Проверка результатов. Сделайте эту записную книжку собственной.

Дальнейшие действия

Используйте эти статьи, чтобы продолжать строить:

  • Постройте строки соединений для настройки соединений для различных типов SQL-баз данных и методов аутентификации.
  • интеграция pandas для загрузки результатов запросов напрямую в DataFrames для анализа в ноутбуках.
  • Интеграция Arrow для работы с столбцовыми данными с использованием Apache Arrow для высокопроизводительной аналитики.