1
resposta

ImportError: cannot import name '_app_ctx_stack' from 'flask'

Boa tarde, estou com o problema a seguir:

/home/roberto/PycharmProjects/jogoteca/jogoteca/.venv/bin/python /home/roberto/PycharmProjects/jogoteca/jogoteca/jogoteca.py 
Traceback (most recent call last):
  File "/home/roberto/PycharmProjects/jogoteca/jogoteca/jogoteca.py", line 2, in <module>
    from flask_sqlalchemy import SQLAlchemy
  File "/home/roberto/PycharmProjects/jogoteca/jogoteca/.venv/lib/python3.10/site-packages/flask_sqlalchemy/__init__.py", line 14, in <module>
    from flask import _app_ctx_stack, abort, current_app, request
ImportError: cannot import name '_app_ctx_stack' from 'flask' (/home/roberto/PycharmProjects/jogoteca/jogoteca/.venv/lib/python3.10/site-packages/flask/__init__.py)

Process finished with exit code 1

Segue o código completo:

from flask import Flask, render_template, request, redirect, session, flash, url_for
from flask_sqlalchemy import SQLAlchemy



app = Flask(__name__)
app.secret_key = 'alura'

app.config['SQLALCHEMY_DATABASE_URI'] = \
    '{SGBD}://{usuario}:{senha}@{servidor}/{database}'.format(

        SGBD = 'mysql+mysqlconnector',
        usuario = 'root',
        senha = 'Admin',
        servidor = 'localhost',
        database = 'jogoteca'
    )

db = SQLAlchemy(app)

class Jogos(db.Model):
    id = db.Column(db.Interger, primary_key=True, autoincrement=True)
    nome = db.Column(db.String(50), nullable=False)
    categoria = db.Column(db.String(40), nullable=False)
    console = db.Column(db.String(20), nullable=False)

    def __repr__(self):
        return '<Name %r>' % self.name

class Usuarios(db.Model):
    nickname = db.Column(db.String(8), primary_key=True)
    nome = db.Column(db.String(20), nullable=False)
    senha = db.Column(db.String(100), nullable=False)

    def __repr__(self):
        return '<Name %r>' % self.name

@app.route('/')
def index():
    lista = Jogos.query.order_by(Jogos.id)
    return render_template('lista.html', titulo='Jogos', jogos=lista)

@app.route('/novo')
def novo():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('novo')))
    return render_template('novo.html', titulo='Novo Jogo')

@app.route('/criar', methods=['POST'])
def criar():
    nome = request.form['nome']
    categoria = request.form['categoria']
    console = request.form['console']
    jogo = Jogo(nome, categoria, console)
    lista.append(jogo)
    return redirect(url_for('index'))

@app.route('/login')
def login():
    proxima = request.args.get('proxima')
    return render_template('login.html', proxima=proxima)

@app.route('/autenticar', methods=['POST'])
def autenticar():
    if request.form['usuario'] in usuarios:
        usuario = usuarios[request.form['usuario']]
        if request.form['senha'] == usuario.senha:
            session['usuario_logado'] = usuario.nickname
            flash(usuario.nickname + 'logado com sucesso!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)
    else:
        flash('Usuário não logado.')
        return redirect(url_for('login'))

@app.route('/logout')
def logout():
    session['usuario_logado'] = None
    flash('Logout efetuado com sucesso!')
    return redirect(url_for('index'))


app.run(debug=True)
1 resposta

Olá, Roberto! Tudo bem?

Parece que há um problema com a versão da biblioteca Flask ou Flask-SQLAlchemy que você está usando.

O erro ImportError: cannot import name '_app_ctx_stack' from 'flask' geralmente indica que o Flask-SQLAlchemy está tentando acessar uma parte do Flask que pode ter sido movida ou renomeada em versões mais recentes.

Aqui estão algumas etapas que você pode seguir para tentar resolver esse problema:

  1. Verifique as versões instaladas: Primeiro, verifique a versão do Flask e do Flask-SQLAlchemy que você está usando. Você pode fazer isso ativando seu ambiente virtual e executando:

    pip show flask
    pip show flask-sqlalchemy
    
  2. Atualize as bibliotecas: Se as versões parecerem desatualizadas ou se você não tem certeza, tente atualizar ambas as bibliotecas. No seu ambiente virtual, execute:

    pip install --upgrade flask
    pip install --upgrade flask-sqlalchemy
    
  3. Reinstale as bibliotecas: Se atualizar não resolver, tente desinstalar e reinstalar as bibliotecas, isso sem especificar nenhuma versão para as bibliotecas:

    pip uninstall flask flask-sqlalchemy
    pip install flask flask-sqlalchemy
    

Caso essas etapas não resolvam o problema, pode ser útil criar um ambiente virtual novo e instalar as bibliotecas novamente para garantir que não haja conflitos ou arquivos corrompidos.

Espero que essas sugestões ajudem a resolver o problema que você está enfrentando!

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.