Python: Manipulando um Banco de Dados com SQLAlchemy
python
Flask-SQLAlchemy é uma extensão para o Flask que adiciona suporte para SQLAlchemy a suas aplicações. Ela combina a simplicidade e flexibilidade do Flask com o poder do SQLAlchemy, facilitando a criação e manipulação de bancos de dados em aplicações web. Então bora configurar e usar o Flask-SQLAlchemy.

Instalação

Primeiro, você deve instalar tanto o Flask quanto o Flask-SQLAlchemy. Use o seguinte comando no terminal:
pip install Flask Flask-SQLAlchemy

Configuração Inicial

Vamos começar criando uma aplicação Flask simples e configurando o Flask-SQLAlchemy.
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///ecommerce.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)
 
  • app.config['SQLALCHEMY_DATABASE_URI']: Define a URI do banco de dados SQLite.
  • db = SQLAlchemy(app): Cria uma instância do SQLAlchemy e a associa à aplicação Flask.

Criando Modelos

Em Flask-SQLAlchemy, você define modelos de banco de dados como classes Python. Cada classe representa uma tabela no banco de dados.
 
class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) price = db.Column(db.Float, nullable=False) description = db.Column(db.Text, nullable=True)
  • class Usuario(db.Model): Define uma classe Product que herda de db.Model.
  • id = db.Column(db.Integer, primary_key=True): Define a coluna id como a chave primária.
  • name = db.Column(db.String(80), nullable=False): Define a coluna name como uma string com até 80 caracteres que não pode ser nula.
  • price = db.Column(db.Float, nullable=False): Define a coluna price como um inteiro que não pode ser nulo.

Inicializando o Banco de Dados e Criando tabelas

Após definir seus modelos, você deve criar as tabelas no banco de dados. Isso é feito chamando o método create_all().
with app.app_context(): db.create_all()
📌
create_all não atualiza tabelas se elas já estiverem no banco de dados. Se você alterar as colunas de um modelo, recomendo uma biblioteca de migração como Alembic com Flask-Alembic ou Flask-Migrate para gerar migrações que atualizem o esquema do banco de dados.

Inserindo Dados

Vamos definir um rota API no Flask para adicionar novos produtos ao banco de dados:
from flask import Flask, request, jsonify
@app.route('/api/products/add', methods=["POST"]) def add_product(): data = request.json if 'name' in data and 'price' in data: new_product = Product( name=data["name"], price=data["price"], description=data.get("description", "")) db.session.add(new_product) db.session.commit() return jsonify({"message": "Produto cadastrado com sucesso"}) return jsonify({"message": "Dados do produto inválido!"}), 400

Vem comigo, bora entender o código 👇

A função add_product() é associada à rota /api/products/add e aceita requisições HTTP POST. Quando uma requisição POST é recebida, a função extrai os dados JSON da requisição, cria uma nova instância do modelo Product com esses dados, e adiciona essa instância à sessão do banco de dados. Em seguida, a transação é confirmada com db.session.commit(), salvando o novo produto no banco de dados se os dados forem válidos assim retornando uma mensagem de sucesso; caso contrário, retorna uma mensagem de erro com código de status 400.

Deletando Dados

Vamos definir um rota API no Flask para delete produtos existentes no banco de dados:
@app.route('/api/products/delete/<int:product_id>') def delete_product(product_id): #Recuperar o produto da base de dados product = Product.query.get(product_id) #Verificar se o produto existe ou não if product: #Se existe, apagar da base de dados db.session.delete(product) db.session.commit() return jsonify({"message": "Produto deletado com sucesso"}) #Se não existe, retornar 404 not found return jsonify({"message": "Produto não encontrado"}), 404
A rota /api/products/delete/<int:product_id> e aceita requisições HTTP DELETE. O <int:product_id> é uma variável de rota que captura um inteiro da URL que é representado pelo id do produto a ser deletado.

Aplicação Completa

Aqui está uma aplicação Flask completa que demonstra os passos acima:
from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///meubanco.db' db = SQLAlchemy(app) class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) price = db.Column(db.Float, nullable=False) description = db.Column(db.Text, nullable=True) with app.app_context(): db.create_all() @app.route('/api/products/add', methods=["POST"]) def add_product(): #Obter os dados JSON da requisição data = request.json # Verificar se os campos 'name' e 'price' estão presentes nos dados if 'name' in data and 'price' in data: new_product = Product( name=data["name"], price=data["price"], # Usa um valor padrão vazio se 'description' não estiver presente description=data.get("description", "")) # Adicionar o novo produto à sessão do banco de dados db.session.add(new_product) # Confirmar a transação para salvar o produto no banco de dados db.session.commit() #Retornar uma resposta JSON indicando que o produto foi cadastrado com sucesso return jsonify({"message": "Produto cadastrado com sucesso"}) # Se os dados necessários não estiverem presentes, retornar uma resposta de erro return jsonify({"message": "Dados do produto inválido!"}), 400 @app.route('/api/products/delete/<int:product_id>') def delete_product(product_id): #Recuperar o produto da base de dados product = Product.query.get(product_id) #Verificar se o produto existe ou não if product: #Se existe, apagar da base de dados db.session.delete(product) db.session.commit() return jsonify({"message": "Produto deletado com sucesso"}) #Se não existe, retornar 404 not found return jsonify({"message": "Produto não encontrado"}), 404 if __name__ == '__main__': app.run(debug=True)
 
O Flask-SQLAlchemy simplifica a integração de bancos de dados em aplicações web Flask, oferecendo uma interface poderosa e fácil de usar para manipulação de dados. Este artigo cobriu os fundamentos da configuração, criação de tabelas, inserção, consulta, atualização e exclusão de dados usando Flask-SQLAlchemy. Com esses conhecimentos, você está pronto para construir aplicações web robustas e eficientes utilizando Flask e SQLAlchemy.

Aprenda programação do zero e DE GRAÇA

No Discover você vai descomplicar a programação, aprender a criar seu primeiro site com a mão na massa e iniciar sua transição de carreira.

COMECE A ESTUDAR AGORA