我正在尝试在新环境中运行现有应用。该应用程序在以前的环境中运行正常,但是当我在本地运行它时,它拒绝与我的数据库连接。
AssertionError: The sqlalchemy extension was not registered to the current application. Please make sure to call init_app() first.
我很困惑的是,这个确切的代码在之前的环境中有效。它要求我调用init_app()但是,据我所知,只有当有多个应用程序时才会这样做。
在调试模式下,应用程序确实识别对象,即
>>> type(Candidate)
<class 'flask_sqlalchemy.model.DefaultMeta'>
我不清楚如何以及在何处将app_init()合并到我的代码中。我试过......
db = SQLAlchemy(app)
db.init_app(app)
但这没有任何影响。
文件夹结构......
app
- static folder
- templates folder
- _init_.py
- config.py
- views.py
- run.py
- Procfile
答案 0 :(得分:1)
您可以尝试在 init .py
中使用代码和结构db = SQLAlchemy()
def create_app():
app = Flask()
db.init_app(app)
from user_model import User
with app.app_context():
db.create_all()
答案 1 :(得分:0)
问题是应该删除遗留代码。我偶然两次初始化应用程序。
答案 2 :(得分:0)
为什么不创建 init.py ,为什么不直接从模型导入数据库
下面的代码显示了我的 models.py 和桌生
@Injectable({
providedIn: 'root'
})
export class NowRunningServiceService {
pagenum:number=0;
apiUrl ="/now-running/";
constructor(private http: HttpClient) { }
getNowRunningMovies() {
return this.http.get(globals.api_base_href+this.apiUrl+ (++this.pagenum));
}
}
然后在您的 app.py或run.py
中您将需要为db导入
from flask import Flask,session
from flask_sqlalchemy import SQLAlchemy
#initialize this two objects below app and db parameters so that app.py will have the same db session.
#then in app.py add from models import db
#finally add db.init_app(app) at the bottom of app.py or run.py
app = Flask(__name__)
db = SQLAlchemy(app)
class Students(db.Model):
id = db.Column('student_id', db.Integer, primary_key = True)
name = db.Column(db.String(50))
email = db.Column(db.String(50))
def __repr__(self):
return '<Student {}>'.format(self.email)
通过移动以下两行代码,可以缓解sql-alchemy 的断言错误 在此代码行的最下方
from models import db
因此,代码将如下所示,并且您的应用程序将正常运行
if __name__ == '__main__':