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.

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()