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.
- Microsoft ODBC Driver for SQL Server (Windows).
- Microsoft ODBC Driver for SQL Server (Linux).
- Microsoft ODBC Driver for SQL Server (macOS).
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:
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'
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.