Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

<p>21/09/2023, 17:37 Como construir um aplicativo CRUD com Flask e SQLAlchemy em Python</p><p>read://https_thepythoncode.com/?url=https%3A%2F%2Fthepythoncode.com%2Farticle%2Fbuilding-crud-app-with-flask-and-sqlalchemy%23%3… 1/6</p><p>Ezzeddin Abdullah • 15 min de leitura · Atualizado em jul 2022 · 16,6 mil · Banco de Dados · Programação Web</p><p>Quer codificar mais rápido? Nosso Python Code Generator permite que você crie scripts Python com apenas alguns cliques. Experimente agora!</p><p>Um aplicativo CRUD é um aplicativo Web que permite criar, ler, atualizar e excluir coisas. É uma tarefa predominante no desenvolvimento web e muito</p><p>útil para aprender a construir aplicativos web.</p><p>Neste tutorial, você aprenderá a construir um aplicativo CRUD no Flask, e o resultado será um back-end de trabalho para um aplicativo web de livraria.</p><p>Definiremos serviços para lidar com as operações CRUD; Solicitações GET, POST, PUTe DELETE para a API da livraria RESTful. Há a segunda parte do</p><p>tutorial onde concluímos a construção do aplicativo adicionando o código frontend usando Jinja2 e Bootstrap; Confira aqui.</p><p>Criar um aplicativo de livraria é útil para o aprendizado porque é um exemplo real, não um projeto de brinquedo. O código será baseado na extensão Flask</p><p>e Flask-SQLAlchemy.</p><p>Flask é um microframework para a construção de aplicativos web usando Python. É uma estrutura muito leve que é fácil de aprender e usar. Ser leve não</p><p>significa que o Flask não seja poderoso. Você pode usar as extensões do Flask sempre que quiser usar algo como o ORM (Object Relational Mapping) em</p><p>seu aplicativo. Neste tutorial, usei a extensão Flask-SQLAlchemy para criar um banco de dados e uma tabela para armazenar livros.</p><p>SQLAlchemy é uma biblioteca Python ORM (Object Relational Mapping) que facilita o trabalho com bancos de dados.</p><p>Índice:</p><p>Projetando o banco de dados</p><p>Antes de criar o banco de dados, precisamos definir o esquema do banco de dados e as tabelas. O esquema é a estrutura de metadados do banco de dados,</p><p>enquanto as tabelas são os dados reais que queremos armazenar.</p><p>O desenho deste projeto é simples: temos uma única tabela chamada livros que armazena os campos livros: ISBN (do livro), título, autor e preço.</p><p>Esses campos serão armazenados no banco de dados através do SQLAlchemy ORM. A API Flask usará esses campos como modelo de dados para as</p><p>operações CRUD.</p><p>Aqui está um diagrama UML para mostrar as funções usadas na API que dependerão do esquema do banco de dados:</p><p>O aplicativo Flask invocava funções dependendo da tabela Livro. (Desenvolvido por Plantuml)</p><p>Como podemos ver, a API do Flask possui cinco funções que dependem da tabela Livro. Você verá como essas funções invocarão métodos apropriados do</p><p>SQLAlchemy. Vamos primeiro ver como estruturamos as funções da API. Essas funções serão invocadas pela API Flask e decoradas com o decorador</p><p>@app.route. Os mapeamentos para cada um são mostrados abaixo:</p><p>get_books() para listar todos os livros que mapeiam para /book/list URL usando a solicitação GET.</p><p>get_book(isbn) para obter o livro especificado definido pelo parâmetro URL isbn que passamos para a função. Essa função é mapeada para a</p><p>URL /book/<isbn> usando a solicitação GET.</p><p>create_book() para adicionar um novo livro ao banco de dados. Essa função é mapeada para a URL /book usando a solicitação POST.</p><p>update_book(isbn) para atualizar o livro especificado, que mapeia para /book/<isbn> URL usando a solicitação PUT.</p><p>delete_book(isbn) para excluir o livro selecionado que mapeia para /book/<isbn> URL usando a solicitação DELETE.</p><p>Estruturação da API</p><p>Para acompanhar este projeto, você pode criar um arquivo e despejar o código nele. Você também pode criar vários arquivos e importar o código desses</p><p>arquivos para separar as preocupações ou, finalmente, você pode verificar esta página para obter o código para cada arquivo.</p><p>Eu prefiro estruturar o código da API em vários arquivos. A razão é que ele ajuda você a manter o código organizado e também ajuda a manter o código</p><p>limpo.</p><p>Vamos criar uma pasta chamada livraria. Dentro dessa pasta, a estrutura deste projeto é mostrada da seguinte maneira:</p><p>├── app</p><p>│ ├── __init__.py</p><p>│ ├── models.py</p><p>│ └── routes.py</p><p>├── bookshop.py</p><p>├── config.py</p><p>Eu tentei tornar a estrutura o mínimo possível sem plantas, o que eu acho que seria exagero para este pequeno aplicativo. Aqui está um detalhamento de</p><p>cada arquivo:</p><p>bookshop.py é o arquivo principal que contém a API Flask.</p><p>config.py tem a configuração para a API.</p><p>app/__init__.py é o arquivo que contém instâncias de banco de dados e aplicativo.</p><p>app/models.py contém o esquema de banco de dados e o ORM.</p><p>Como construir um aplicativo CRUD com Flask e SQLAlchemy em</p><p>Python</p><p>https://thepythoncode.com/topic/using-databases-in-python</p><p>https://thepythoncode.com/topic/web-programming</p><p>https://thepythoncode.com/assistant/code-generator/</p><p>https://en.wikipedia.org/wiki/Create,_read,_update_and_delete</p><p>https://flask.palletsprojects.com/en/2.1.x/</p><p>https://thepythoncode.com/article/front-end-of-crud-flask-app-using-jinja-and-bootstrap</p><p>https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping</p><p>https://flask-sqlalchemy.palletsprojects.com/en/2.x/</p><p>https://flask.palletsprojects.com/en/2.1.x/api/#flask.Flask.route</p><p>https://medium.com/the-brainwave/how-to-write-clean-code-in-python-with-solid-principles-principle-1-e5b0d2e6469f</p><p>https://medium.com/the-brainwave/how-to-write-clean-code-in-python-with-solid-principles-principle-1-e5b0d2e6469f</p><p>21/09/2023, 17:37 Como construir um aplicativo CRUD com Flask e SQLAlchemy em Python</p><p>read://https_thepythoncode.com/?url=https%3A%2F%2Fthepythoncode.com%2Farticle%2Fbuilding-crud-app-with-flask-and-sqlalchemy%23%3… 2/6</p><p>app/routes.py contém as funções de API que a API invocará.</p><p>Vamos começar com o arquivo app/models.py para criar o banco de dados.</p><p>Instalando as dependências</p><p>Antes de criar o modelo de banco de dados, vamos instalar a extensão Flask e Flask-SQLAlchemy.</p><p>Vamos também instalar o mecanismo de banco de dados. Neste tutorial, você usará o MySQL, mas sinta-se livre para usar qualquer outro mecanismo de</p><p>banco de dados. SQLAlchemy suporta MySQL, SQLite, Postgres e muito mais. Para MySQL, instalamos a biblioteca PyMySQL:</p><p>$ pip install flask flask-sqlalchemy PyMySQL</p><p>Criando o modelo de banco de dados</p><p>Vamos definir o modelo de banco de dados no arquivo app/models.py da seguinte maneira:</p><p>from . import db</p><p>class Book(db.Model):</p><p>__tablename__ = 'books'</p><p>isbn = db.Column(db.Integer, primary_key=True)</p><p>author = db.Column(db.String(100), nullable=False)</p><p>title = db.Column(db.String(100), nullable=False)</p><p>price = db.Column(db.Float)</p><p>def to_json(self):</p><p>return {</p><p>'isbn': self.isbn,</p><p>'author': self.author,</p><p>'title': self.title,</p><p>'price': self.price</p><p>}</p><p>Nesse arquivo, definimos o nome da tabela como livros e os campos como:</p><p>ISBN: A chave primária da tabela.</p><p>autor: autor do livro, um campo de string obrigatório e não pode ser NULL. É restrito a 100 caracteres.</p><p>Título: O título do livro, um campo obrigatório, e tem 100 caracteres de comprimento.</p><p>preço: o preço do livro, que é um campo flutuante e pode ser NULL.</p><p>A função to_json() é usada aqui para converter o objeto Book em um objeto JSON que pode ser retornado ao cliente no navegador. Veremos uma maneira</p><p>melhor de fazer isso nas próximas seções.</p><p>Observe que a classe Book é uma subclasse do db. Classe de modelo. Essa instância de banco de dados é definida no arquivo app/__init__.py da seguinte</p><p>maneira:</p><p>from flask_sqlalchemy import SQLAlchemy</p><p>db = SQLAlchemy()</p><p>Configurando seu aplicativo Flask</p><p>Agora que temos o modelo de banco de dados, vamos configurar o aplicativo Flask para a extensão SQLAlchemy.</p><p>A prática recomendada para configurar seu aplicativo é definir uma classe Config pai que manterá configurações padrão para todos os ambientes. Em</p><p>seguida, crie uma instância da classe de configuração filho para seus ambientes. No nosso caso, criaremos três ambientes: desenvolvimento, teste e</p><p>produção.</p><p>Vejamos isso em ação:</p><p>#config.py</p><p>import os</p><p>class Config:</p><p>SQLALCHEMY_TRACK_MODIFICATIONS = False</p><p>@staticmethod</p><p>def init_app(app):</p><p>pass</p><p>class DevelopmentConfig(Config):</p><p>DEBUG = True</p><p>SQLALCHEMY_DATABASE_URI = os.getenv("DEV_DATABASE_URL")</p><p>class TestingConfig(Config):</p><p>TESTING = True</p><p>SQLALCHEMY_DATABASE_URI = os.getenv("TEST_DATABASE_URL")</p><p>class ProductionConfig(Config):</p><p>SQLALCHEMY_DATABASE_URI = os.getenv("DATABASE_URL")</p><p>config = {</p><p>"development": DevelopmentConfig,</p><p>"testing": TestingConfig,</p><p>"production": ProductionConfig,</p><p>"default": DevelopmentConfig</p><p>}</p><p>Portanto, a classe Config contém as configurações globais para o aplicativo, que são:</p><p>SQLALCHEMY_TRACK_MODIFICATIONS definido como False para desativar o sistema de rastreamento de modificações. Essa é uma boa prática para</p><p>evitar a sobrecarga de controlar as alterações de Flask-SQLAlchemy para a biblioteca SQLAlchemy.</p><p>init_app() é um método estático usado para inicializar as configurações do aplicativo.</p><p>https://pypi.org/project/PyMySQL/</p><p>https://thepythoncode.com/article/working-with-json-files-in-python</p><p>21/09/2023, 17:37 Como construir um aplicativo CRUD com Flask e SQLAlchemy em Python</p><p>read://https_thepythoncode.com/?url=https%3A%2F%2Fthepythoncode.com%2Farticle%2Fbuilding-crud-app-with-flask-and-sqlalchemy%23%3… 3/6</p><p>Temos três classes filho para cada ambiente após essa classe pai Config. Cada ambiente define as configurações adequadas para esse ambiente.</p><p>E, finalmente, temos o dicionário de configuração que mapeia o nome do ambiente para a classe de configuração. O ambiente padrão é o ambiente de</p><p>desenvolvimento que usaremos neste tutorial.</p><p>A classe DevelopmentConfig tem o atributo DEBUG definido como True porque queremos ver as mensagens de depuração no navegador se houver um erro na</p><p>API.</p><p>Além disso, ele tem o atributo SQLALCHEMY_DATABASE_URI definido para a URL do banco de dados, que definimos para a conexão com o banco de dados.</p><p>No nosso caso, definimos a URL do banco de dados para a variável de ambiente DEV_DATABASE_URL , que é a URL do banco de dados MySQL. Execute o</p><p>seguinte comando no seu terminal para definir esse var env:</p><p>$ export DEV_DATABASE_URL=mysql+pymysql://<username>:<password>@localhost:3306/flaskapp</p><p>onde <nome de usuário> e <senha> são as credenciais para o banco de dados MySQL e flaskapp é o nome do banco de dados. Sinta-se à vontade para</p><p>substituir qualquer um dos valores pelos seus.</p><p>Se você estiver no Windows, poderá usar o comando SET em vez de exportar:</p><p>$ SET DEV_DATABASE_URL=mysql+pymysql://<username>:<password>@localhost:3306/flaskapp</p><p>Se você estiver trabalhando com outro mecanismo de banco de dados, poderá alterar o DEV_DATABASE_URL para a URL apropriada para esse banco de dados.</p><p>Por exemplo, se você estiver usando SQLite, poderá defini-lo como sqlite:///<path_to_db>.</p><p>Agora vamos importar o dicionário de configuração e começar a criar o aplicativo Flask. Agora, o arquivo app/__init__.py tem a seguinte aparência:</p><p>from flask import Flask</p><p>from flask_sqlalchemy import SQLAlchemy</p><p>from config import config</p><p>db = SQLAlchemy()</p><p>def create_app(config_name):</p><p>app = Flask(__name__)</p><p>app.config.from_object(config[config_name])</p><p>config[config_name].init_app(app)</p><p>db.init_app(app)</p><p>return app</p><p>A função create_app() é usada para criar a instância do aplicativo com base no ambiente, que é passada como um argumento para a função por meio do</p><p>parâmetro config_name.</p><p>O método app.config.from_object() é usado para carregar a configuração do dicionário config. Em seguida, essa configuração é usada para inicializar o</p><p>aplicativo. Finalmente, o banco de dados da instância SQLAlchemy é inicializado com a instância do aplicativo.</p><p>Vamos configurar os primeiros pontos de extremidade para a API, as solicitações GET.</p><p>Configurando as solicitações GET</p><p>Vamos adicionar as funções de solicitação GET ao arquivo app/routes.py:</p><p>import os</p><p>from . import create_app</p><p>from .models import Book</p><p>from flask import jsonify</p><p>app = create_app(os.getenv('FLASK_CONFIG') or 'default')</p><p>@app.route("/book/list", methods=["GET"])</p><p>def get_books():</p><p>books = Book.query.all()</p><p>return jsonify([book.to_json() for book in books])</p><p>@app.route("/book/<int:isbn>", methods=["GET"])</p><p>def get_book(isbn):</p><p>book = Book.query.get(isbn)</p><p>if book is None:</p><p>abort(404)</p><p>return jsonify(book.to_json())</p><p>A função create_app() instancia a instância do aplicativo e, em seguida, usa o decorador app.route() para registrar os pontos de extremidade. Dentro do</p><p>método get_books() consultamos o banco de dados para todos os livros usando Book.query.all() e, em seguida, retornamos a representação JSON de todos</p><p>os livros usando a função jsonify(); é uma função auxiliar que serializa objetos Python para JSON.</p><p>Agora, vamos adicionar alguns dados por meio do SQLAlchemy antes de executar o aplicativo.</p><p>Adicionando dados ao SQLAlchemy</p><p>Uma maneira de adicionar dados ao banco de dados é abrir um shell interativo do Flask e, em seguida, criar uma nova instância do modelo Book.</p><p>Antes de fazermos isso, vamos configurar nossa variável de ambiente do aplicativo flask usando este comando:</p><p>$ export FLASK_APP=bookshop.py</p><p>Se você estiver no Windows, use SET:</p><p>$ SET FLASK_APP=bookshop.py</p><p>e então podemos executar:</p><p>$ flask shell</p><p>21/09/2023, 17:37 Como construir um aplicativo CRUD com Flask e SQLAlchemy em Python</p><p>read://https_thepythoncode.com/?url=https%3A%2F%2Fthepythoncode.com%2Farticle%2Fbuilding-crud-app-with-flask-and-sqlalchemy%23%3… 4/6</p><p>Este comando abre uma sessão interativa para você executar comandos Python. Ele ajuda a depurar e testar seu código.</p><p>Agora estamos dentro da casca. Vamos importar a instância de banco de dados e o modelo de livro:</p><p>>>> from app import db</p><p>>>> db</p><p><SQLAlchemy engine=mysql+pymysql://root:***@localhost:3306/flaskapp?charset=utf8></p><p>>>> from app.models import Book</p><p>>>> Book</p><p><class 'app.models.Book'></p><p>Com a suposição de que o banco de dados flaskapp já está criado em sua máquina. Vamos criar a tabela Book no banco de dados e, em seguida, definir um</p><p>novo livro:</p><p>>>> db.create_all()</p><p>>>> book = Book(author="Ezz", title="Cleaner Python", price=0.0)</p><p>>>> book</p><p><app.models.Book object at 0x7f404a052e50></p><p>>>> db.session.add(book)</p><p>>>> db.session.commit()</p><p>Portanto, agora a tabela Book foi criada com o db.create_all() que faz todas as tabelas que são subclasses de db. Modelo.</p><p>A variável book é adicionada ao banco de dados usando db.session.add(). Observe que adicionar o objeto de livro ao banco de dados não significa que</p><p>você pode consultá-lo. Ele ainda não está comprometido com o banco de dados. É por isso que precisamos executar db.session.commit() para salvar as</p><p>alterações feitas no banco de dados.</p><p>Vamos criar mais um livro:</p><p>>>> book2 = Book(author="Ahmed", title="Python", price=10.99)</p><p>>>> db.session.add(book2)</p><p>>>> db.session.commit()</p><p>Então agora temos dois livros em nossa livraria. Isso será suficiente para demonstrar a listagem e o jogo com a API.</p><p>Vamos fechar o shell com CTRL+C (ou CMD+C) e retornar ao nosso terminal para executar o aplicativo.</p><p>Executando o aplicativo Flask</p><p>Você pode executar o aplicativo executando o seguinte comando em seu terminal:</p><p>$ export FLASK_APP=bookshop.py</p><p>$ flask run</p><p>No Windows:</p><p>$ SET FLASK_APP=bookshop.py</p><p>$ flask run</p><p>O primeiro comando define a variável de ambiente FLASK_APP para apontar para o arquivo bookshop.py. Se você já definiu FLASK_APP, não deve repetir. Você</p><p>encontrará um erro esperado quando fizer a execução do frasco. Esse arquivo está vazio. Vamos corrigir isso e importar a variável de aplicativo do</p><p>arquivo:bookshop.pyapp/routes.py</p><p>from app.routes import app</p><p>Agora você pode executar o aplicativo e expor os pontos de extremidade da API em http://localhost:5000/book/list.</p><p>Nesse caso, você encontrará a seguinte resposta JSON:</p><p>[</p><p>{</p><p>"author": "Ezz",</p><p>"isbn": 1,</p><p>"price": 0.0,</p><p>"title": "Cleaner Python"</p><p>},</p><p>{</p><p>"author": "Ahmed",</p><p>"isbn": 2,</p><p>"price": 10.99,</p><p>"title": "Python"</p><p>}</p><p>]</p><p>E quando você invocar esse http://localhost:5000/book/1 de</p><p>ponto de extremidade, você receberá o primeiro livro:</p><p>{</p><p>"author": "Ezz",</p><p>"isbn": 1,</p><p>"price": 0.0,</p><p>"title": "Cleaner Python"</p><p>}</p><p>Substituindo 1 pelo ISBN do livro, você obterá a resposta associada ao livro que você consultou.</p><p>Excluindo um livro</p><p>A solicitação DELETE é semelhante ao que fizemos para a solicitação GET. Vamos abrir o arquivo app/routes.py novamente e adicionar o seguinte</p><p>trecho:</p><p>from . import db</p><p># ...</p><p>@app.route("/book/<int:isbn>", methods=["DELETE"])</p><p>def delete_book(isbn):</p><p>book = Book.query.get(isbn)</p><p>if book is None:</p><p>abort(404)</p><p>db.session.delete(book)</p><p>db.session.commit()</p><p>return jsonify({'result': True})</p><p>21/09/2023, 17:37 Como construir um aplicativo CRUD com Flask e SQLAlchemy em Python</p><p>read://https_thepythoncode.com/?url=https%3A%2F%2Fthepythoncode.com%2Farticle%2Fbuilding-crud-app-with-flask-and-sqlalchemy%23%3… 5/6</p><p>Aqui, usamos db.session.delete(book) para excluir o livro do banco de dados e, em seguida, confirmamos essa alteração usando db.session.commit().</p><p>Você pode se perguntar como testar esse ponto de extremidade enquanto a rota DELETE é a mesma que a rota GET. Para excluir um livro, você pode usar</p><p>curl ou qualquer programa cliente de API, como Postman, e escolher o método DELETE porque, por padrão, ele considerará a solicitação como uma</p><p>solicitação GET.</p><p>Por exemplo, se você deseja excluir o segundo livro, você pode usar o seguinte comando:</p><p>$ curl http://localhost:5000/book/2 -X DELETE</p><p>{</p><p>"result": true</p><p>}</p><p>Que retorna com êxito uma resposta JSON com a chave de resultado definida como True conforme o esperado.</p><p>Você pode invocar o ponto de extremidade GET novamente para verificar se o segundo livro foi passado observando a URL:</p><p>http://localhost:5000/book/list ou usando o comando curl:</p><p>$ curl http://localhost:5000/book/list</p><p>[</p><p>{</p><p>"author": "Ezz",</p><p>"isbn": 1,</p><p>"price": 0.0,</p><p>"title": "Cleaner Python"</p><p>}</p><p>]</p><p>O que dá uma lista de apenas um livro; o primeiro.</p><p>Adicionando um novo livro</p><p>Também podemos adicionar um novo livro ao banco de dados invocando uma função do método POST.</p><p>from flask import request</p><p>...</p><p>@app.route('/book', methods=['POST'])</p><p>def create_book():</p><p>if not request.json:</p><p>abort(400)</p><p>book = Book(</p><p>title=request.json.get('title'),</p><p>author=request.json.get('author'),</p><p>price=request.json.get('price')</p><p>)</p><p>db.session.add(book)</p><p>db.session.commit()</p><p>return jsonify(book.to_json()), 201</p><p>Para testar a adição de um novo livro, vamos usar o programa curl novamente:</p><p>$ curl -H "Content-Type: application/json" -X POST -d '{"title": "Learning", "author": "Ibrahim", "price": "3.44"}' http://localhost:5000/book</p><p>{</p><p>"author": "Ibrahim",</p><p>"isbn": 3,</p><p>"price": 3.44,</p><p>"title": "Learning"</p><p>}</p><p>Claro, também podemos adicionar novos livros usando a concha do frasco. O problema com essa abordagem é que você precisa importar as instâncias db e</p><p>Book. Para evitar isso, agora o arquivo bookshop.py teria a seguinte aparência (depois de adicionar um trecho a ele):</p><p>from app import db</p><p>from app.routes import app</p><p>from app.models import Book</p><p>@app.shell_context_processor</p><p>def make_shell_context():</p><p>return dict(db=db, Book=Book)</p><p>O decorador @app.shell_context_processor é usado para registrar uma função que será chamada para injetar variáveis na sessão do shell.</p><p>A função make_shell_context() retorna um dicionário que contém as instâncias db e Book que precisamos adicionar à sessão do shell para usá-las no shell</p><p>sem precisar importá-las.</p><p>Atualizando um livro</p><p>Atualizar um livro é semelhante a adicionar um novo, exceto que usamos o método PUT em vez de POST.</p><p>Vamos adicionar o seguinte ao arquivo app/routes.py</p><p>@app.route('/book/<int:isbn>', methods=['PUT'])</p><p>def update_book(isbn):</p><p>if not request.json:</p><p>abort(400)</p><p>book = Book.query.get(isbn)</p><p>if book is None:</p><p>abort(404)</p><p>book.title = request.json.get('title', book.title)</p><p>book.author = request.json.get('author', book.author)</p><p>book.price = request.json.get('price', book.price)</p><p>db.session.commit()</p><p>return jsonify(book.to_json())</p><p>Para testar a atualização de um livro, vamos usar curl:</p><p>$ curl http://localhost:5000/book/3 -X PUT -H "Content-Type: application/json" -d '{"author": "Ahmed", "title": "Python for Beginners", "price": 1</p><p>{</p><p>"author": "Ahmed",</p><p>"isbn": 3,</p><p>https://curl.se/</p><p>21/09/2023, 17:37 Como construir um aplicativo CRUD com Flask e SQLAlchemy em Python</p><p>read://https_thepythoncode.com/?url=https%3A%2F%2Fthepythoncode.com%2Farticle%2Fbuilding-crud-app-with-flask-and-sqlalchemy%23%3… 6/6</p><p>"price": 12.99,</p><p>"title": "Python for Beginners"</p><p>}</p><p>Conclusão</p><p>Este tutorial abordou a criação de uma API RESTful que interage com um aplicativo CRUD usando Flask e SQLAlchemy por meio de um aplicativo do</p><p>mundo real.</p><p>Vimos como usar SQLAlchemy para se conectar a um banco de dados, como criar um modelo, como mapear o modelo para uma tabela, como criar uma</p><p>rota, como usar o programa curl para invocar e testar a API e como usar o shell de frasco para depurar seu aplicativo.</p><p>Também abordamos como ler, criar, atualizar e excluir um livro do aplicativo da livraria CRUD.</p><p>Você pode obter o código completo para este tutorial nesta página.</p><p>Se você quiser fazer uma interface gráfica do usuário em torno do aplicativo, então verifique a segunda parte do tutorial, onde construímos um bom</p><p>frontend usando Jinja2 e Bootstrap.</p><p>Aprenda também: Tarefas assíncronas com aipo em Python.</p><p>Codificação ♥ feliz</p><p>Acabou de terminar o artigo? Por que não aumentar suas habilidades em Python com nosso Assistente de Código Python? Confira!</p><p>Ver código completo Criar código para mim</p><p>https://thepythoncode.com/code/building-crud-app-with-flask-and-sqlalchemy</p><p>https://thepythoncode.com/article/front-end-of-crud-flask-app-using-jinja-and-bootstrap</p><p>https://thepythoncode.com/article/async-tasks-with-celery-redis-and-flask-in-python</p><p>https://thepythoncode.com/assistant/code-assistant/</p><p>https://thepythoncode.com/code/building-crud-app-with-flask-and-sqlalchemy</p><p>https://thepythoncode.com/assistant/code-generator/</p>

Mais conteúdos dessa disciplina