Object-Relational Mapping (ORM) é uma técnica de programação que permite a conversão de dados entre sistemas incompatíveis usando objetos orientados a objetos. Com ORMs, você pode interagir com seu banco de dados de forma mais intuitiva e eficiente. Neste artigo, vamos explorar como usar SQLAlchemy, um dos ORMs mais populares para Python.
1. Introdução ao SQLAlchemy
SQLAlchemy é uma biblioteca poderosa para SQL e ORM em Python, que oferece uma maneira flexível e eficiente de trabalhar com bancos de dados relacionais.
Bibliotecas Necessárias
Certifique-se de ter as bibliotecas necessárias instaladas:
pip install sqlalchemy
2. Estrutura do Projeto
Organize seu projeto com a seguinte estrutura:
project/ │ ├── app.py └── requirements.txt
3. Configurando o SQLAlchemy
Código para configurar o SQLAlchemy
No arquivo app.py, adicione o seguinte código para configurar o SQLAlchemy:
from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # Configurando o banco de dados SQLite DATABASE_URL = 'sqlite:///./test.db' engine = create_engine(DATABASE_URL, echo=True) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() # Criando a tabela de usuários class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True) email = Column(String, unique=True, index=True) # Criando as tabelas no banco de dados Base.metadata.create_all(bind=engine)
4. Inserindo Dados no Banco de Dados
Código para inserir dados
Adicione a função para inserir dados na tabela:
def create_user(db, name, email): db_user = User(name=name, email=email) db.add(db_user) db.commit() db.refresh(db_user) return db_user # Inserindo alguns usuários if __name__ == '__main__': db = SessionLocal() user_1 = create_user(db, 'Alice', '[email protected]') user_2 = create_user(db, 'Bob', '[email protected]') print(user_1) print(user_2) db.close()
5. Consultando Dados no Banco de Dados
Código para consultar dados
Adicione a função para consultar dados da tabela:
def get_users(db): return db.query(User).all() if __name__ == '__main__': db = SessionLocal() users = get_users(db) for user in users: print(user) db.close()
6. Atualizando Dados no Banco de Dados
Código para atualizar dados
Adicione a função para atualizar dados na tabela:
def update_user_email(db, user_id, new_email): user = db.query(User).filter(User.id == user_id).first() if user: user.email = new_email db.commit() db.refresh(user) return user if __name__ == '__main__': db = SessionLocal() updated_user = update_user_email(db, 1, '[email protected]') print(updated_user) db.close()
7. Deletando Dados no Banco de Dados
Código para deletar dados
Adicione a função para deletar dados da tabela:
def delete_user(db, user_id): user = db.query(User).filter(User.id == user_id).first() if user: db.delete(user) db.commit() return user if __name__ == '__main__': db = SessionLocal() deleted_user = delete_user(db, 2) print(deleted_user) db.close()
8. Testando o Código
Você pode testar cada função chamando-as diretamente no arquivo app.py ou criando um script separado para testar todas as funcionalidades.
Código completo de app.py
from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker DATABASE_URL = 'sqlite:///./test.db' engine = create_engine(DATABASE_URL, echo=True) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True) email = Column(String, unique=True, index=True) Base.metadata.create_all(bind=engine) def create_user(db, name, email): db_user = User(name=name, email=email) db.add(db_user) db.commit() db.refresh(db_user) return db_user def get_users(db): return db.query(User).all() def update_user_email(db, user_id, new_email): user = db.query(User).filter(User.id == user_id).first() if user: user.email = new_email db.commit() db.refresh(user) return user def delete_user(db, user_id): user = db.query(User).filter(User.id == user_id).first() if user: db.delete(user) db.commit() return user if __name__ == '__main__': db = SessionLocal() user_1 = create_user(db, 'Alice', '[email protected]') user_2 = create_user(db, 'Bob', '[email protected]') print(f"Created: {user_1}, {user_2}") users = get_users(db) print("Users after insertion:") for user in users: print(user) updated_user = update_user_email(db, 1, '[email protected]') print(f"Updated: {updated_user}") users = get_users(db) print("Users after update:") for user in users: print(user) deleted_user = delete_user(db, 2) print(f"Deleted: {deleted_user}") users = get_users(db) print("Users after deletion:") for user in users: print(user) db.close()
9. Conclusão
Neste artigo, aprendemos como usar SQLAlchemy para interagir com um banco de dados SQL de forma eficiente e intuitiva. Passamos pela configuração do SQLAlchemy, criação de tabelas, inserção, consulta, atualização e deleção de dados.
Este guia fornece uma base sólida para começar a trabalhar com ORMs em Python. Continue explorando e adicionando funcionalidades mais complexas ao seu projeto conforme avança no aprendizado de desenvolvimento de software.