Escolar Documentos
Profissional Documentos
Cultura Documentos
Estaremos usando SQLAlchemy , que é um ORM que oculta muita lógica SQL . Se
você já executou algumas instruções SQL antes, pode ser mais fácil entender o que
está acontecendo nos bastidores. Se você quiser aprender mais sobre a relação
entre SQL e SQLAlchemy, você pode ver meu tutorial especificamente sobre isso em
Compose.io .
Todo o código usado neste tutorial está disponível como um repositório do GitHub .
Você pode clonar isso se quiser começar do produto final em vez de construir cada
etapa.
Começando
Antes de podermos construir nosso aplicativo, precisamos instalar algumas
dependências. Assim que tivermos isso, construiremos uma página da Web básica
que simplesmente exibe texto estático. Depois que isso funcionar, adicionaremos o
banco de dados e, em seguida, adicionaremos cada uma das operações CRUD por
vez.
InstalandoAoas dependências
usar o Codementor , você concorda com nossa
ACEITAR
Política de Cookies .
A primeira coisa
Gostou quepostagem?
desta precisamos fazer é instalar algumas bibliotecas
de100
terceiros 66
para Python. Estes são:
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 2/26
p
16/10/2022 23:23
y Building a CRUD application with Flask and SQLAlchemy | Codementor
Flask, que usaremos para rotear o tráfego da Web por meio de solicitações HTTP
para funções específicas em nossa base de código,
SQLAlchemy, que usaremos para tornar a interação entre Python e nosso banco
de dados mais suave,
Flask-SQLAlchemy, que usaremos para tornar a interação entre Flask e
SQLAlchemy mais suave.
Você pode instalar tudo isso através do pip executando o seguinte comando:
Se você está acostumado a usar virtualenv para seus projetos Python, instale as
bibliotecas dentro de um deles e solte o --user sinalizador.
flask-crud-app/
bookmanager.py
app = Flask(__name__)
ACEITAR
Política de Cookies .
def home():
Gostou"My
return desta postagem?
flask app"
100 66
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 3/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=True)
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 4/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Se isso não ocorrer conforme o esperado, você verá a saída de depuração em seu
console e no próprio navegador da Web (porque definimos o debug=True sinalizador
na última linha do nosso código).
Neste ponto, temos uma aplicação web, mas não faz muito. Para torná-lo interativo,
precisamos ser capazes de aceitar a entrada de nossos usuários. Faremos isso
adicionando um formulário HTML que passa informações do front-end do nosso
aplicativo (o que nossos usuários veem), através do Flask e para o back-end (nosso
código Python).
Para nosso aplicativo acima, definimos a string "My flask app" em nosso código
Python. Tudo bem, pois era uma única linha, mas à medida que nosso código front-
end cresce, será complicado definir tudo em nosso arquivo Python. O Flask permite a
separação de interesses através dos chamados "modelos". Geralmente são
.html arquivos, com alguma lógica Python misturada por meio da linguagem do
mecanismo de modelo Jinja . Vamos adicionar um modelo ao nosso aplicativo para
abrigar todo o nosso código front-end.
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 5/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
flask-crud-app/
bookmanager.py
templates/
home.html
<html>
<body>
</form>
</body>
</html>
Uma entrada de texto (linha 4), que associará qualquer entrada ao nome "título".
Um botão de envio (linha 5), que contém o texto "Adicionar".
Uma direção para enviar os dados ("post") para nossa aplicação web na página
principal (a / rota, que é a mesma página que definimos em nosso .py arquivo).
No bookmanager.py arquivo, precisamos fazer duas alterações para usar nosso novo
template. Na seção de importações, adicione a seguinte linha:
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 6/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
return render_template("home.html")
app = Flask(__name__)
@app.route("/")
def home():
return render_template("home.html")
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=True)
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 7/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Esta é uma caixa de entrada simples onde o usuário pode digitar texto e pressionar o
botão "Adicionar". Fazer isso enviará o texto para o back-end do nosso aplicativo e
nos deixará na mesma página. Antes de tentarmos, precisamos ajustar nosso código
de back-end para lidar com essa nova funcionalidade.
Isso importa o request módulo do Flask, o que nos permite lidar facilmente com
muitos aspectos das solicitações HTTP, incluindo dados enviados por meio de
formulários.
Agora, modifique a home() função para aceitar solicitações POST e receber a entrada
do nosso formulário. A nova função deve ter a seguinte aparência:
@app.route("/",
Ao usarmethods=["GET", "POST"])
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 8/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
p ( q )
return render_template("home.html")
Configurando o Flask-SQLAlchemy
Como instalamos o SQLAlchemy e a extensão Flask Flask-SQLAlchemy no início deste
tutorial, podemos começar a usá-los agora. Precisamos configurar um banco de
dados, abrir uma conexão com ele e associar essa conexão ao nosso aplicativo da
web. Modifique a primeira parte do código em seu bookmanager.py arquivo (antes da
primeira definição de função) para ter a seguinte aparência.
import os
project_dir = os.path.dirname(os.path.abspath(__file__))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
db = SQLAlchemy(app)
N li h 9 10 d bi d tá i h d
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2
j t 10/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Nas linhas 9-10, descobrimos onde está o caminho do nosso projeto e
configuramos um arquivo de banco de dados com seu caminho completo e o
sqlite:/// prefixo para informar ao SQLAlchemy qual mecanismo de banco de
dados estamos usando.
Na linha 13, informamos à nossa aplicação web onde nosso banco de dados será
armazenado.
Na linha 15, inicializamos uma conexão com o banco de dados e mantemos isso
na db variável. Usaremos isso para interagir com nosso banco de dados.
Na linha 16, inicializamos o banco de dados
Esta é a configuração que precisamos para que nossa aplicação web interaja com
nosso banco de dados. Agora podemos definir o conceito de um livro e como vamos
armazená-lo em nosso banco de dados.
class Book(db.Model):
def __repr__(self):
Há bastante coisa acontecendo nessas cinco linhas de código, então vamos separá-
las.
Na linha 1, criamos uma nova classe que herda de um modelo básico de banco de
dados, fornecido pelo SQLAlchemy. Isso também fará com que o SQLAlchemy crie
uma tabela chamada book , que será usada para armazenar nossos Book objetos.
Na linha 2, criamos um atributo do nosso livro chamado title . SQLAlchemy
Ao usar o Codementor , você concorda com nossa
usará issoPolítica
comode um ACEITAR que um
nome. de coluna em nossa book tabela. Dizemos
Cookies
títuloGostou
consiste empostagem?
desta String no máximo 80 caracteres, que nunca devemos
100 66
armazenar dois ou mais livros com o mesmo título (os títulos dos livros devem ser
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 11/26
16/10/2022 23:23
(
Building a CRUD application with Flask and SQLAlchemy | Codementor
unique ), que todo livro precisa ter um título (o título não é nullable ), e que o
título é a principal forma de identificarmos um livro específico em nosso banco de
dados (o título é o primary_key ).
Nas linhas 4-5, definimos como representar nosso objeto livro como uma string.
Isso nos permite fazer coisas como print(book) , e ver uma saída significativa.
def home():
if request.form:
book = Book(title=request.form.get("title"))
db.session.add(book)
db.session.commit()
return render_template("home.html")
Você pode executar o código novamente neste ponto se quiser e tentar adicionar um
item por meio do formulário, mas receberá um erro porque ainda não terminamos
de configurar nosso banco de dados.
>>> db.create_all()
>>> exit()
Agora você pode visitar seu aplicativo da web novamente e enviar quantos títulos de
livros desejar. Agora terminamos a parte C de nosso aplicativo CRUD — podemos
criar livros. Em seguida, queremos poder lê -los novamente.
books = Book.query.all()
Agora, atualize o home.html arquivo para renderizar cada um dos livros como HTML
usando um loop Jinja for. Enquanto estiver editando o arquivo, você também pode
adicionar alguns cabeçalhos para o formulário e a lista de livros que exibiremos.
Todo o código para home.html agora deve ter a seguinte aparência.
<html>
<body>
<h1>Add book</h1>
Ao usar
<input o Codementor ,value="Add">
Gostou desta postagem? 100 66
<h1>Books</h1>
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 13/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
<h1>Books</h1>
<p>{{book.title}}</p>
{% endfor %}
</body>
</html>
I é CR d CRUD f i l ilh d d i l
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 li A i 14/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Isso é CR de CRUD feito e polvilhado - agora podemos criar e ler livros. A seguir,
veremos como Atualizar os títulos dos livros existentes.
Como o usuário não vai querer digitar o título antigo e o novo, vamos transformar
cada título em seu próprio formulário. Dessa forma, quando o usuário enviar o novo
título, podemos obter automaticamente o título antigo também. Faremos isso com
uma hidden entrada HTML para que possamos recuperar o back-end de título antigo
sem sobrecarregar nosso front-end de interface do usuário.
<p>{{book.title}}</p>
</form>
{% endfor %}
from flask import redirect
@app.route("/update", methods=["POST"])
def update():
newtitle = request.form.get("newtitle")
oldtitle = request.form.get("oldtitle")
book = Book.query.filter_by(title=oldtitle).first()
book.title = newtitle
db.session.commit()
return redirect("/")
Esta função é semelhante a essa home() , mas em vez de criar livros, ela
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 16/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 17/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Agora que temos CRU fora do caminho, a última coisa que precisamos fazer é Excluir
livros que não queremos mais.
</form>
E adicione uma /delete rota e uma função ao bookmanager.py arquivo, que deve ter
a seguinte aparência.
@app.route("/delete", methods=["POST"])
def delete():
title = request.form.get("title")
book = Book.query.filter_by(title=title).first()
db.session.delete(book)
db.session.commit()
return redirect("/")
Toques finais
Não pretendíamos construir uma aplicação web útil e bonita, mas podemos fazer um
ou dois pequenos retoques para melhorar o layout e a funcionalidade do que temos.
Se quisermos exibir o título do livro, a atualização e os botões de exclusão em uma
única linha, podemos colocar os livros em uma tabela HTML, com cada livro em uma
nova linha e as diferentes seções em colunas diferentes.
Para fazer isso, atualize o home.html arquivo para ter a seguinte aparência.
<html>
<body>
<h1>Add book</h1>
</form>
<h1>Books</h1>
<table>
<tr>
<td>
{{book.title}}
</td>
<td>
</form>
</td>
<td>
<input
Ao usar type="hidden"
o Codementor value="{{book.title}}"
, você concorda com nossa name="title">
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 20/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
</tr>
{% endfor %}
</table>
</body>
</html>
Se você nunca fez HTML antes, talvez queira passar rapidamente por um tutorial
específico de HTML. As partes importantes do código acima são:
Se você recarregar o aplicativo agora, verá que o layout mudou, como na imagem
abaixo.
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 21/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
def home():
books = None
if request.form:
try:
book = Book(title=request.form.get("title"))
db.session.add(book)
db.session.commit()
except Exception as e:
print(e)
books = Book.query.all()
@app.route("/update", methods=["POST"])
def update():
try:
newtitle = request.form.get("newtitle")
oldtitle = request.form.get("oldtitle")
book = Book.query.filter_by(title=oldtitle).first()
book.title = newtitle
db.session.commit()
except Exception as e:
print(e)
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 22/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Claro, há muito mais melhorias que você pode fazer. Se você deseja estender o
aplicativo, você pode:
Se você gostou deste post, e quer saber mais sobre o Flask, dê uma olhada no meu
livro Flask by Example . Nele, eu acompanho você na construção de três aplicativos
Web divertidos e úteis e mostro como implantar aplicativos Flask em um Servidor
Privado Virtual para que eles possam ser acessados por qualquer pessoa pela
Internet.
Se você tiver alguma dúvida sobre este post, sinta-se à vontade para comentar
abaixo ou entrar em contato comigo no Twitter .
100 66 COMPARTILHAR
Pythoneer e Escritor
Ei, eu sou Gareth. Eu amo ensinar e a maioria das coisas Python. Tenho experiência geral
na resolução de problemas, construção de soluções escaláveis e posso fornecer
conselhos específicos ou gerais.
SEGUIR
66 Respostas
Encontre um parceiro de
Ao usar o Codementor , você concorda com nossa
Política de Cookies .
ACEITAR
programação em pares no
Gostou desta postagem? 100 66
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 24/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Codementor
INICIAR
Olá codificadores!
O material de vídeo mencionado neste artigo explica como interagir com uma API
gerada pelo Flask usando a visualização da API, uma página simples que permite
adicionar, editar e remover itens. O produto aprimorado com esse recurso, Soft UI
Dashboard , pode ser baixado do Github e usado em produção, projetos comerciais
ou atividades de eLearning. Para os recém-chegados, o Flask é uma estrutura de
back-end líder com suporte ativo e versionado por especialistas em programação.
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 25/26
16/10/2022 23:23 Building a CRUD application with Flask and SQLAlchemy | Codementor
Saber mais
https://www.codementor.io/@garethdwyer/building-a-crud-application-with-flask-and-sqlalchemy-dm3wv7yu2 26/26