Guia de início rápido: conectar-se a um banco de dados SQL a partir de um Jupyter Notebook

Neste início rápido, utilize o Jupyter Notebook no Visual Studio Code para obter rapidamente informações úteis para a empresa. Use o mssql-python driver do Python para se ligar à sua base de dados SQL, ler os dados e depois formatá-los para uso em emails, relatórios e apresentações.

O mssql-python driver não requer nenhuma dependência externa em máquinas Windows. O driver instala tudo o que precisa com uma única pip instalação, permitindo que você use a versão mais recente do driver para novos scripts sem quebrar outros scripts que você não tem tempo para atualizar e testar.

Documentação | Código-fonte | Pacote (PyPI) | Código Visual Studio

Pré-requisitos


Criar um banco de dados SQL

Criar ou ligar-se a uma base de dados SQL numa das seguintes plataformas:

Crie o projeto e execute o código

Criar um novo projeto

  1. Abra um prompt de comando no diretório de desenvolvimento. Se não tiver um, crie um novo diretório, como python ou scripts. Evite pastas no seu OneDrive, pois a sincronização pode interferir na gestão do seu ambiente virtual.

  2. Crie um novo projeto com uv.

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

Adicionar dependências

No mesmo diretório, instale os pacotes mssql-python, python-dotenv, rich, pandas e matplotlib. Em seguida, adicione ipykernel e uv como dependências de desenvolvimento. O VS Code exige ipykernel para executar células do bloco de notas e uv para gerir pacotes a partir das células do bloco de notas.

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

Abra o Visual Studio Code.

No mesmo diretório, execute o seguinte comando.

code .

Atualizar pyproject.toml

  1. O pyproject.toml contém os metadados para o seu projeto.

  2. Atualize a descrição para ser mais descritiva.

    description = "A quick example using the mssql-python driver and Jupyter Notebooks."
    
  3. Salve e feche o arquivo.

Salvar a cadeia de conexão

  1. Abra o .gitignore arquivo e adicione uma exclusão para .env arquivos. Seu arquivo deve ser semelhante a este exemplo. Certifique-se de salvá-lo e fechá-lo quando terminar.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. No diretório atual, crie um novo arquivo chamado .env.

  3. Dentro do .env arquivo, adicione uma entrada para sua cadeia de conexão chamada SQL_CONNECTION_STRING. Substitua o exemplo aqui pelo valor real da cadeia de conexão.

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

    Sugestão

    A cadeia de conexão usada aqui depende em grande parte do tipo de banco de dados SQL ao qual você está se conectando. Se você estiver se conectando a um Banco de Dados SQL do Azure ou a um banco de dados SQL na Malha, use a cadeia de conexão ODBC na guia Cadeias de conexão. Talvez seja necessário ajustar o tipo de autenticação dependendo do cenário. Para obter mais informações sobre cadeias de conexão e sua sintaxe, consulte Referência de sintaxe de cadeia de conexão.

Criar um Jupyter Notebook

  1. Selecione Arquivo e, em seguida, Novo arquivo e Jupyter Notebook na lista. Um novo bloco de anotações é aberto.

  2. Selecione Ficheiro, depois Guardar Como... e dê um nome ao seu novo bloco de notas.

  3. Adicione as seguintes importações na primeira célula.

    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. Use o botão + Markdown na parte superior do bloco de anotações para adicionar uma nova célula de marcação.

  5. Adicione o seguinte texto à nova célula de marcação.

    ## Define queries for use later
    
  6. Selecione a marca de seleção na barra de ferramentas da célula ou use os atalhos Ctrl+Enter de teclado ou Shift+Enter para renderizar a célula de marcação.

  7. Use o botão + Código na parte superior do bloco de anotações para adicionar uma nova célula de código.

  8. Adicione o seguinte código à nova célula de código.

    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;
    """
    

Exibir resultados em uma tabela

  1. Use o botão + Markdown na parte superior do bloco de anotações para adicionar uma nova célula de marcação.

  2. Adicione o seguinte texto à nova célula de marcação.

    ## Print orders by customer and display in a table
    
  3. Selecione a marca de seleção na barra de ferramentas da célula ou use os atalhos Ctrl+Enter de teclado ou Shift+Enter para renderizar a célula de marcação.

  4. Use o botão + Código na parte superior do bloco de anotações para adicionar uma nova célula de código.

  5. Adicione o seguinte código à nova célula de código.

    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)
    

    Sugestão

    No macOS, tanto ActiveDirectoryInteractive como ActiveDirectoryDefault funcionam para a autenticação do Microsoft Entra. ActiveDirectoryInteractive Solicita-te para iniciar sessão sempre que executas o script. Para evitar pedidos repetidos para iniciar sessão, inicie sessão uma vez através da CLI do Azure ao executar az login, e depois utilize ActiveDirectoryDefault, que reutiliza a credencial em cache.

  6. Use o botão Executar Tudo na parte superior do notebook para executar o notebook.

  7. Selecione o kernel jupyter-notebook-qs quando solicitado.

Exibir resultados em um gráfico

  1. Analise a saída da última célula. Você verá uma tabela com três colunas e cinco linhas.

  2. Use o botão + Markdown na parte superior do bloco de anotações para adicionar uma nova célula de marcação.

  3. Adicione o seguinte texto à nova célula de marcação.

    ## Display spend by category in a horizontal bar chart
    
  4. Selecione a marca de seleção na barra de ferramentas da célula ou use os atalhos Ctrl+Enter de teclado ou Shift+Enter para renderizar a célula de marcação.

  5. Use o botão + Código na parte superior do bloco de anotações para adicionar uma nova célula de código.

  6. Adicione o seguinte código à nova célula de código.

    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. Use o botão Executar célula ou Ctrl+Alt+Enter para executar a célula.

  8. Analise os resultados. Torne este caderno seu.

Passos seguintes

Use estes artigos para continuar a construir:

  • Construa cadeias de ligação para configurar ligações para diferentes tipos de bases de dados SQL e métodos de autenticação.
  • Integração com pandas para carregar os resultados das consultas diretamente no DataFrames para análise em notebooks.
  • Integração do Arrow para trabalhar com dados colunares usando o Apache Arrow para análises de alto desempenho.