5
respostas

[Dúvida] Executando SQLALCHEMY erro

após executar a instalação do SQLAlchemy e seguir os passos "Conectando com os banco de dados", foi apresentado o seguinte erro: Traceback (most recent call last): File "/Users/rubensbravo/PycharmProjects/jogoteca/jogoteca.py", line 2, in from flask_sqlalchemy import SQLAlchemy File "/Users/rubensbravo/PycharmProjects/jogoteca/venv/lib/python3.9/site-packages/flask_sqlalchemy/init.py", line 14, in from flask import _app_ctx_stack, abort, current_app, request ImportError: cannot import name '_app_ctx_stack' from 'flask' (/Users/rubensbravo/PycharmProjects/jogoteca/venv/lib/python3.9/site-packages/flask/init.py)

Process finished with exit code 1

Alguma dica? segue a linha 1 e 2 do jogoteca.py

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

abaixo o console com a instalação efetuada:
(venv) rubensbravo@192 jogoteca % pip install flask-sqlalchemy==2.5.1 

Requirement already satisfied: flask-sqlalchemy==2.5.1 in ./venv/lib/python3.9/site-packages (2.5.1) Requirement already satisfied: SQLAlchemy>=0.8.0 in ./venv/lib/python3.9/site-packages (from flask-sqlalchemy==2.5.1) (2.0.41) Requirement already satisfied: Flask>=0.10 in ./venv/lib/python3.9/site-packages (from flask-sqlalchemy==2.5.1) (3.1.1) Requirement already satisfied: itsdangerous>=2.2.0 in ./venv/lib/python3.9/site-packages (from Flask>=0.10->flask-sqlalchemy==2.5.1) (2.2.0) Requirement already satisfied: click>=8.1.3 in ./venv/lib/python3.9/site-packages (from Flask>=0.10->flask-sqlalchemy==2.5.1) (8.1.8) Requirement already satisfied: werkzeug>=3.1.0 in ./venv/lib/python3.9/site-packages (from Flask>=0.10->flask-sqlalchemy==2.5.1) (3.1.3) Requirement already satisfied: blinker>=1.9.0 in ./venv/lib/python3.9/site-packages (from Flask>=0.10->flask-sqlalchemy==2.5.1) (1.9.0) Requirement already satisfied: importlib-metadata>=3.6.0 in ./venv/lib/python3.9/site-packages (from Flask>=0.10->flask-sqlalchemy==2.5.1) (8.7.0) Requirement already satisfied: jinja2>=3.1.2 in ./venv/lib/python3.9/site-packages (from Flask>=0.10->flask-sqlalchemy==2.5.1) (3.1.6) Requirement already satisfied: markupsafe>=2.1.1 in ./venv/lib/python3.9/site-packages (from Flask>=0.10->flask-sqlalchemy==2.5.1) (3.0.2) Requirement already satisfied: zipp>=3.20 in ./venv/lib/python3.9/site-packages (from importlib-metadata>=3.6.0->Flask>=0.10->flask-sqlalchemy==2.5.1) (3.21.0) Requirement already satisfied: typing-extensions>=4.6.0 in ./venv/lib/python3.9/site-packages (from SQLAlchemy>=0.8.0->flask-sqlalchemy==2.5.1) (4.13.2) Requirement already satisfied: greenlet>=1 in ./venv/lib/python3.9/site-packages (from SQLAlchemy>=0.8.0->flask-sqlalchemy==2.5.1) (3.2.2) WARNING: You are using pip version 21.1.2; however, version 25.1.1 is available. You should consider upgrading via the '/Users/rubensbravo/PycharmProjects/jogoteca/venv/bin/python -m pip install --upgrade pip' command. (venv) rubensbravo@192 jogoteca %

5 respostas

Olá, espero que essa resposta te encontre bem! Acredito que esse erro acontece porque você está usando Flask 3.x com uma versão antiga do Flask-SQLAlchemy (2.5.1), que tenta importar flask._app_ctx_stack, um recurso removido no Flask 3.0. Para corrigir, você pode atualizar o Flask-SQLAlchemy para uma versão compatível com Flask 3, executando pip install --upgrade flask-sqlalchemy, ou fazer downgrade do Flask para a versão 2.x com pip install "Flask<3". Por exemplo, Flask 2.3.3 funciona bem com Flask-SQLAlchemy 2.5.1, enquanto Flask 3.1.1 é compatível com Flask-SQLAlchemy 3.1.1. Verifique as versões instaladas e mantenha elas compatíveis para evitar esse tipo de erro. Depois me retorne para eu saber se você conseguiu, abraços

Atualizei o Flask_SQLAlchemy para a versão compatível (3.1.1) e agora aparece a msg: Traceback (most recent call last): File "/Users/rubensbravo/PycharmProjects/jogoteca/jogoteca.py", line 18, in db = flask_sqlalchemy.SQLAlchemy(app) NameError: name 'flask_sqlalchemy' is not defined

segue abaixo parte do programa:

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 = "127.0.0.1", database = "jogoteca" )

db = flask_sqlalchemy.SQLAlchemy(app)

Detalhe que a linha 2 fica toda cinza, ou seja, ela não está sendo usada!?! kkk

A linha 2 é essa: from flask_sqlalchemy import SQLAlchemy

Descobri o problema. na linha db= ... estava instanciado errado. hehe.

Perfeito! Boas aulas e bons códigos! Qualquer coisa só chamar