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.](https://justcode.com.br/wp-content/uploads/2024/05/odbc-app.webp)
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()