Explorando o SQLAlchemy: ORM e Operações CRUD com Python

Gabriel Moscarde
3 min readSep 15, 2024

--

O SQLAlchemy é uma poderosa biblioteca de mapeamento objeto-relacional (ORM) para Python. Ele permite que desenvolvedores interajam com bancos de dados de forma mais intuitiva, utilizando classes Python para representar tabelas e instâncias dessas classes para representar registros no banco de dados.

O SQLAlchemy é amplamente utilizado por sua flexibilidade e capacidade de trabalhar com diversos sistemas de banco de dados, como MySQL, PostgreSQL, SQLite, Oracle, e mais. Este artigo explora os conceitos básicos de CRUD (Criação, Leitura, Atualização e Deleção), ilustrando como a biblioteca facilita essas operações.

Por que usar SQLAlchemy?

- Abstração: Você interage com bancos de dados utilizando objetos Python, sem necessidade de escrever SQL diretamente.

- Flexibilidade: Suporte a diversos sistemas de banco de dados.

- Eficiência: Controle total sobre consultas complexas quando necessário.

Pré-requisitos

Antes de começarmos, certifique-se de ter os seguintes itens configurados no seu ambiente:

1. Python 3.: A biblioteca SQLAlchemy é compatível com versões recentes do Python.

2. Um banco de dados: Pode ser MySQL, PostgreSQL, SQLite, ou outros suportados pelo SQLAlchemy. Veja a Documentação Oficial para mais detalhes.

3. Instalação do SQLAlchemy:

pip install sqlalchemy

Adicionalmente, se estiver usando um banco de dados como MySQL ou PostgreSQL, instale também os drivers necessários, como pymysql, psycopg2 ou outro (veja a doc).

Configurando a Base de Dados

A primeira etapa para começar a usar o SQLAlchemy é configurar a conexão com o banco de dados e definir o modelo de dados.

Criando a conexão

A função create_engine do SQLAlchemy é usada para estabelecer uma conexão com o banco de dados. Neste exemplo, estamos utilizando um banco de dados MySQL.

from sqlalchemy import create_engine
# Conectando ao banco de dados MySQL
engine = create_engine("mysql+pymysql://<user>:<password>@localhost/<db_name>?charset=utf8mb4")

Definindo as Tabelas

O declarative_base permite definir a estrutura de tabelas do banco de dados utilizando classes Python. Cada classe corresponde a uma tabela, e os atributos correspondem às colunas.

from sqlalchemy.orm import declarative_base

# Criando a classe base
Base = declarative_base()

# Definindo as tabelas
# Definição da classe Livro
class Livro(Base):
tablename = 'livros'
id = Column(Integer, primary_key=True)
titulo = Column(String, nullable=False)
autor = Column(String, nullable=False)
preco = Column(Float, nullable=False)

# Definição da classe Usuario
class Usuario(Base):
tablename = 'usuarios'
id = Column(Integer, primary_key=True)
nome = Column(String, nullable=False)
email = Column(String, nullable=False, unique=True)

Gerenciamento de Sessão

Uma prática recomendada ao trabalhar com SQLAlchemy é o gerenciamento eficiente de sessões. As sessões são usadas para interagir com o banco de dados e devem ser adequadamente fechadas após o uso.

# Criando uma sessão
Session = sessionmaker(bind=engine)
session = Session()

Criando as tabelas

Após definir as classes, o método create_all() cria as tabelas no banco de dados, se elas ainda não existirem.

Base.metadata.create_all(engine)

Performando Operações CRUD

1. Criação de Registro (Create)

def adicionar_livro(titulo, autor, preco):
novo_livro = Livro(titulo=titulo, autor=autor, preco=preco)
session.add(novo_livro)
session.commit()
return novo_livro

2. Leitura de Registro (Read)

def listar_livros():
return session.query(Livro).all()

Aqui, adicionamos a capacidade de ler usuários e explorar os dados presentes na tabela.

Podemos combinar o método .query() com .filter_by(chave=”valor”) para realizar um filtro.

3. Atualização de Registro (Update)

def atualizar_livro(id, titulo=None, autor=None, preco=None):
livro = session.query(Livro).filter_by(id=id).one()
if titulo:
livro.titulo = titulo
if autor:
livro.autor = autor
if preco:
livro.preco = preco
session.commit()
return livro

4. Deletando um Registro (Delete)

def deletar_livro(id):
livro = session.query(Livro).filter_by(id=id).one()
session.delete(livro)
session.commit()

NOTA: O código desenvolvido neste artigo está disponível com mais detalhes em: https://github.com/Moscarde/sqlalchemy_basic_crud

Conclusão

Neste tutorial, exploramos os fundamentos do SQLAlchemy, desde a configuração do ambiente até a realização de operações CRUD. O SQLAlchemy proporciona uma interface poderosa e flexível para manipulação de bancos de dados em Python, simplificando o processo de desenvolvimento.

Próximos passos sugeridos:

  • Explorar transações no SQLAlchemy para operações mais seguras e eficientes.
  • Entender o uso de relacionamentos entre tabelas usando o SQLAlchemy ORM.
  • Investigar consultas mais complexas utilizando o Query e técnicas avançadas de SQLAlchemy.

Referências

--

--

No responses yet