Flask Development

Deleção Eficiente de Registros com Flask-SQLAlchemy

Spread the love

Este tutorial demonstra como excluir registros de um banco de dados usando Flask-SQLAlchemy de forma eficaz. Abordaremos vários métodos e melhores práticas para garantir a integridade e a segurança dos dados.

Sumário

Configurando Flask-SQLAlchemy

Antes de começarmos a excluir registros, vamos garantir que seu ambiente Flask-SQLAlchemy esteja configurado corretamente. Essa extensão poderosa simplifica as interações com o banco de dados integrando o ORM do SQLAlchemy com a estrutura Flask.


from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'  # Substitua pelo seu URI do banco de dados
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.name}>'

with app.app_context():
    db.create_all()

Este código define um modelo User simples. Lembre-se de substituir 'sqlite:///mydatabase.db' pelo seu URI do banco de dados. Sistemas de banco de dados diferentes (PostgreSQL, MySQL, etc.) exigem URIs diferentes. Certifique-se de que os drivers de banco de dados necessários estejam instalados.

Excluindo Registros

Flask-SQLAlchemy usa db.session.delete() para remover registros. Essa função aceita uma instância do modelo de banco de dados.

Método 1: Excluindo por Instância de Objeto

Se você já tiver o objeto que representa o registro:


with app.app_context():
    user_to_delete = User.query.filter_by(name='John Doe').first()
    if user_to_delete:
        db.session.delete(user_to_delete)
        db.session.commit()
        print(f"Usuário '{user_to_delete.name}' excluído com sucesso.")
    else:
        print("Usuário não encontrado.")

Método 2: Excluindo por ID

Excluir com base na chave primária (ID) é comum e eficiente:


with app.app_context():
    user_id_to_delete = 1
    user_to_delete = User.query.get(user_id_to_delete)
    if user_to_delete:
        db.session.delete(user_to_delete)
        db.session.commit()
        print(f"Usuário com ID {user_id_to_delete} excluído com sucesso.")
    else:
        print(f"Usuário com ID {user_id_to_delete} não encontrado.")

Método 3: Excluindo Múltiplos Registros

Para excluir vários registros, use filter() ou filter_by() para selecioná-los, depois itere e exclua cada um:


with app.app_context():
    users_to_delete = User.query.filter(User.name.like('%Doe%')).all()
    for user in users_to_delete:
        db.session.delete(user)
    db.session.commit()

Melhores Práticas e Tratamento de Erros

Incorpore sempre medidas robustas de tratamento de erros e segurança:

  • Tratamento de Erros: Envolva as operações do banco de dados em blocos try...except para capturar e lidar com possíveis exceções (por exemplo, SQLAlchemyError).
  • Transações: Para várias ações de banco de dados, use transações (db.session.begin(), db.session.commit(), db.session.rollback()) para garantir atomicidade. Se uma operação falhar, toda a transação é revertida.
  • Segurança: Nunca insira diretamente a entrada do usuário em consultas SQL. Use consultas parametrizadas ou métodos ORM para evitar vulnerabilidades de injeção SQL.
  • Exclusões Lógicas: Em vez de excluir registros fisicamente, considere adicionar um sinalizador booleano “excluído” ao seu modelo. Isso permite que você remova registros logicamente sem perder dados, o que pode ser útil para auditoria ou recuperação.

Lembre-se de adaptar este código ao seu modelo de banco de dados e requisitos de aplicativo específicos. Teste completamente sua lógica de exclusão para evitar perda acidental de dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *