Administrador de Fonte de Dados ODBC no Microsoft Windows.

Como utilizar Python com o banco de dados Microsoft Access

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

OBS: Este tutorial funciona apenas no Microsoft Windows.


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

    Access Database Engine

    A gestão dos drivers pode ser realizada 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.

    Exemplo de CRUD

    O arquivo do Microsoft Access que foi utilizando no exemplo está disponível no repositório:

    # -*- coding: utf-8 -*-
    '''CRUD - pyodbc - Microsoft Access.'''
    
    import pathlib
    
    import pyodbc
    
    BASE_DIR = pathlib.Path(__file__).resolve().parent
    DB_FILE = BASE_DIR.joinpath('example.accdb')
    
    con = pyodbc.connect(
        'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
        f'DBQ={DB_FILE};'
    )
    
    # Cursor (DML, DDL, etc).
    cur = con.cursor()
    
    # 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())
    
    # Where.
    query = 'SELECT * FROM table_name WHERE user_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 user_id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    query = 'UPDATE table_name SET name = ? WHERE user_id = ?;'
    cur.execute(
        query,
        ('joão', 1),
    )
    
    query = 'SELECT * FROM table_name WHERE user_id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    # Delete.
    print('\n[!] Delete [!]')
    query = 'SELECT * FROM table_name WHERE user_id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    query = 'DELETE FROM table_name WHERE user_id = ?;'
    cur.execute(
        query,
        (1,),
    )
    
    query = 'SELECT * FROM table_name WHERE user_id = ?;'
    cur.execute(
        query,
        (1,),
    )
    print(cur.fetchone())
    
    con.close()