答案在这里:http ://flask-sqlalchemy.pocoo.org/latest/api/#configuration
请参阅有关以下内容的部分:
两者之间的区别在于,在第一种情况下,诸如create_all()和drop_all()之类的方法将始终有效,但在第二种情况下,必须存在flask.Flask.request_context()。
这里有更多信息:http : //flask-sqlalchemy.pocoo.org/latest/contexts/
如果这一切令人困惑(可能是,因为它是在谈论Flask的高级功能),则简短的简短版本是db.init_app(app)
更改app
对象,但不更改db
对象中的任何内容。这是有目的的,因为可能有不止一个人在app
飞来飞去,并且db
可能必须与所有人交谈。(我说这是高级功能。)
因此,当您在db.create_all()
没有实时请求的情况下打电话(这会创建一个正在运行的全局变量app
)时,它不知道要连接的内容和炸弹。这就是错误的含义。
在您的情况下,我将把sqlAlchemy调用放回去__init__.py
并传递app
给它,这是最简单的方法:
db = sqlAlchemy(app)
或者保持原样,然后在第一个请求之前运行安装程序:
@app.before_first_request
def create_database():
db.create_all()
希望对您有所帮助!如果您遇到其他问题,请告诉我。