使用init_app()向当前应用程序注册sqlalchemy扩展

时间:2018-01-14 21:06:17

标签: python flask flask-sqlalchemy

我正在尝试在新环境中运行现有应用。该应用程序在以前的环境中运行正常,但是当我在本地运行它时,它拒绝与我的数据库连接。

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

3 个答案:

答案 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__':