Administrador de Fonte de Dados ODBC no Microsoft Windows.

Como utilizar Python com o banco de dados SQL Server

Hoje veremos como utilizar a linguagem de programação Python com o banco de dados Microsoft SQL Server através do conector pyodbc.

Microsoft SQL Server

O Microsoft SQL Server é um sistema de gerenciamento de banco de dados relacional (RDBMS) desenvolvido pela Microsoft.

Ele é amplamente utilizado por empresas e organizações para armazenar, consultar e gerenciar grandes volumes de dados.

O SQL Server oferece suporte a uma variedade de recursos, incluindo consultas SQL avançadas, procedimentos armazenados, funções definidas pelo usuário, gatilhos, replicação de dados, integração com outras tecnologias da Microsoft, como o .NET Framework, e ferramentas de administração robustas.

O SQL Server está disponível em várias edições, desde a versão Express gratuita até edições empresariais com recursos avançados de escalabilidade e segurança.


Posts relacionados:


    Dependências

    macOS

    brew install \
    unixodbc

    Linux

    Arch Linux

    sudo pacman -S \
    unixodbc

    Fedora

    sudo dnf install \
    python3-devel \
    unixODBC-devel

    Ubuntu

    sudo apt install \
    unixodbc-dev

    Pyodbc

    pyodbc é um módulo Python que fornece uma interface para acessar bancos de dados utilizando ODBC (Open Database Connectivity).

    O ODBC é uma API padrão da indústria para acessar bancos de dados, independentemente do sistema operacional em que o banco de dados esteja sendo executado.

    O pyodbc permite que os desenvolvedores Python se conectem a uma ampla variedade de bancos de dados, como SQL Server, Oracle, MySQL, PostgreSQL, SQLite e outros, usando o mesmo código, desde que o driver ODBC apropriado esteja instalado.

    A sua instalação pode ser feita através do gerenciador de pacotes do Python:

    pip install pyodbc

    Driver

    Além do conector é necessária a instalação do driver do SQL Server.

    Cada versão do Microsoft SQL Server pode utilizar uma versão especifica do driver:

    • SQL Server: Lançado com o SQL Server 2000.
    • SQL Native Client: Lançado com o SQL Server 2005 (Também conhecido como versão 9.0).
    • SQL Server Native Client 10.0: Lançado com o SQL Server 2008.
    • SQL Server Native Client 11.0: Lançado com o SQL Server 2012.
    • ODBC Driver 11 for SQL Server: Suporta o SQL Server 2005 até 2014.
    • ODBC Driver 13 for SQL Server: Suporta o SQL Server 2005 até 2016.
    • ODBC Driver 13.1 for SQL Server: Suporta o SQL Server 2008 Até 2016.
    • ODBC Driver 17 for SQL Server: Suporta SQL Server 2008 Até 2017.
    • ODBC Driver 17 for SQL Server: Suporta SQL Server 2008 Até 2017.
    • ODBC Driver 18 for SQL Server: Suporta SQL Server 2019 ou superior.

    No Microsoft Windows é possível realizar a gestão dos drivers através do aplicativo aplicativo Administrador de Fonte de Dados ODBC:

    Administrador de Fonte de Dados ODBC no Microsoft Windows.
    Administrador de Fonte de Dados ODBC no Microsoft Windows.

    Contêiner

    Para testar o código de exemplo foi utilizando o seguinte arquivo docker-compose.yaml:

    services:
      db:
        image: mcr.microsoft.com/mssql/server:2022-latest
        container_name: SQLServer
        restart: on-failure
        ports:
          - '1433:1433'
        environment:
          ACCEPT_EULA: 'Y'
          SA_PASSWORD: 'Docker.123456'
          MSSQL_PID: 'Developer'
          # MSSQL_PID: 'Express'
    

    📝 Contêiner testado com Docker e com o Podman.


    Exemplo de CRUD

    # -*- coding: utf-8 -*-
    """CRUD - Python - PyODBC - SQL Server."""
    
    import pyodbc
    
    con = pyodbc.connect(
        'DRIVER={ODBC Driver 18 for SQL Server};'
        'SERVER=localhost;'
        'port=1433;'
        'DATABASE=master;'
        'UID=sa;'
        'PWD=Docker.123456;'
        'TrustServerCertificate=yes'
    )
    cur = con.cursor()
    
    cur.execute('DROP TABLE IF EXISTS table_name;')
    
    table_name = '''IF OBJECT_ID(N'table_name', N'U') IS NULL
    CREATE TABLE table_name (
    id      INT PRIMARY KEY IDENTITY,
    name    VARCHAR(32),
    age     SMALLINT
    );'''
    cur.execute(table_name)
    
    # Create.
    print('[!] Create [!]')
    query = 'INSERT INTO table_name (name, age) VALUES (?, ?);'
    cur.execute(
        query,
        ('renato', 35),
    )
    
    # Bulk create.
    cur.executemany(
        query,
        (
            ('maria', 25),
            ('sandy', 19),
        )
    )
    
    # Read.
    print('\n[!] Read [!]')
    cur.execute('SELECT * FROM table_name;')
    print(cur.fetchall())
    
    # Limit.
    query = 'SELECT TOP (?) * FROM table_name;'
    cur.execute(
        query,
        (3,),
    )
    print(cur.fetchall())
    
    # Where.
    query = 'SELECT * FROM table_name WHERE id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    query = 'SELECT * FROM table_name WHERE age > ?;'
    cur.execute(
        query,
        (20,),
    )
    print(cur.fetchall())
    
    # Update.
    print('\n[!] Update [!]')
    query = 'SELECT * FROM table_name WHERE id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    query = 'UPDATE table_name SET name = ? WHERE id = ?;'
    cur.execute(
        query,
        ('joão', 1),
    )
    
    query = 'SELECT * FROM table_name WHERE id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    # Delete.
    print('\n[!] Delete [!]')
    query = 'SELECT * FROM table_name WHERE id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    query = 'DELETE FROM table_name WHERE id = ?;'
    cur.execute(
        query,
        (1,),
    )
    
    query = 'SELECT * FROM table_name WHERE id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    con.close()
    

    Conclusão

    Em resumo, um desenvolvedor pode escolher o Microsoft SQL Server devido à sua integração com o ecossistema Microsoft, desempenho e escalabilidade robustos, recursos avançados, segurança sólida e suporte técnico confiável.

    Esses aspectos tornam o SQL Server uma escolha atraente para projetos que exigem essas características específicas.