为什么我收到此错误:AttributeError:'LocalStack'对象在 SQLAlchemy 中没有属性'__ident_func__'

Jam*_*osh 5 python sqlalchemy flask flask-sqlalchemy

我正在尝试使用 Flask 创建一个应用程序,在这一步中,我需要连接本地服务器中的数据库,为了实现此目的,我使用了命令 db = SQLAlchemy(app) 并从 Flask- 导入了 SQLALchemy- alchemy(我已在下面详细提供了我的代码)。当我启动我的 Flask 应用程序服务器时,我收到错误 AttributeError: 'LocalStack' object has no attribute '--ident_func--' pointing to the line db = SQLAlchemy(app) 。任何帮助将不胜感激,因为我真的不知道我错过了什么。

应用程序.py

#----------------------------------------------------------------------------#
# Imports
#----------------------------------------------------------------------------#
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy


#----------------------------------------------------------------------------#
# Configs
#----------------------------------------------------------------------------#
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)

#----------------------------------------------------------------------------#
# Models
#----------------------------------------------------------------------------#
#to include my database schema models later

#----------------------------------------------------------------------------#
# routes
#----------------------------------------------------------------------------#
@app.route('/')
def index():
    return render_template('pages/home.html')


if __name__=='__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

配置文件

# Enable debug mode.
DEBUG = True

# Connect to the database
SQLALCHEMY_DATABASE_URI = 'postgresql://postgres@localhost:5432/fyyurdb'
Run Code Online (Sandbox Code Playgroud)

首页.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body>
        <h1>hello world</h1>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

点冻结(requirements.txt)

Babel==2.9.0
click==8.1.3
colorama==0.4.4
Flask==2.1.2
Flask-Moment==0.11.0
Flask-SQLAlchemy==2.4.4
Flask-WTF==0.14.3
greenlet==1.1.2
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.1
python-dateutil==2.6.0
pytz==2022.1
six==1.16.0
SQLAlchemy==1.4.36
Werkzeug==2.1.2
WTForms==3.0.1

Run Code Online (Sandbox Code Playgroud)

终端错误消息

(fyyurenv) C:\Users\Gm Kahosh\Desktop\fyyur\cd0046-SQL-and-Data-Modeling-for-the-Web>python app.py
Traceback (most recent call last):
  File "C:\Users\Gm Kahosh\Desktop\fyyur\cd0046-SQL-and-Data-Modeling-for-the-Web\app.py", line 13, in <module>
    db = SQLAlchemy(app)
  File "C:\Users\Gm Kahosh\Desktop\fyyur\fyyurenv\lib\site-packages\flask_sqlalchemy\__init__.py", line 714, in __init__
    self.session = self.create_scoped_session(session_options)
  File "C:\Users\Gm Kahosh\Desktop\fyyur\fyyurenv\lib\site-packages\flask_sqlalchemy\__init__.py", line 747, in create_scoped_session                                                                                                                                 on
    scopefunc = options.pop('scopefunc', _app_ctx_stack.__ident_func__)
AttributeError: 'LocalStack' object has no attribute '__ident_func__'
Run Code Online (Sandbox Code Playgroud)

小智 17

我遇到了类似的问题,我使用 卸载它python -m pip uninstall flask-sqlalchemy并使用python -m pip install flask-sqlalchemy . 问题解决了。


sna*_*erb 6

这个问题的根本原因是对 Flask 所依赖的 Werkzeug 包的更改需要更改 Flask 构建作用域会话的方式。此处记录了更改。如果 Werkzeug 包有更改但 Flask 包没有更改,则会发生该错误。

升级到 Flask-SQLAlchemy >= 2.5.1 应该可以解决该问题。


Jam*_*osh 0

我真的应该提到我从 GitHub 存储库克隆的源代码,因此尽管使用命令安装了所有要求,但我猜还是存在影响我的代码文件的代码污染pip install -r requirement.txt。解决这个问题的方法是,我删除了所有项目文件并独立启动了我的项目,没有来自 GitHub 存储库的任何入门模板。这个项目对我来说只是一个练习,但现在剩下的一个大问题是如何克隆应用程序并成功安装所有这些依赖项而不出现错误。