Поделиться через


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

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

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

Документация по mssql-python | Пакет (PyPi) | Visual Studio Code

Предпосылки


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

Для этого быстрого старта требуется упрощенная схема AdventureWorks2025 в Microsoft SQL Server, базе данных Fabric SQL или базе данных Azure 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 с помощью таких команд, как !uv add mssql_python.

uv add mssql_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)
    

    Подсказка

    Чтобы использовать проверку подлинности Microsoft Entra в macOS, необходимо войти через расширение Azure Repos в Visual Studio Code или с помощью az loginкомандной строки Azure (CLI).

  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. Проверка результатов. Сделайте эту записную книжку собственной.

Следующий шаг

Посетите репозиторий mssql-python драйверов GitHub, чтобы получить дополнительные примеры, чтобы внести идеи или сообщить о проблемах.