我有一个正在运行的Flask应用程序,其结构如下:
myproject/
myapp.py
models.py
我可以在本地运行应用程序,我可以在调试器中访问它(Pycharm是好奇的)。我无法启动python解释器中的db实例,我需要能够访问工作对象进行调试。
以下是我在翻译中所做的事情。
import sys
sys.path.append('/path/to/myproject/')
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
from models import db, User, Post
app = Flask('myapp')
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/mydb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
我可以调用User和Post类。但是,如果我尝试使用query
来访问基础数据库,请说User.query.all()
,我会得到
RuntimeError:应用程序未在db实例上注册,并且没有应用程序绑定到当前上下文
需要做些什么才能让解释器能够访问从myapp.py运行时找到的db?我不认为我需要我正在使用的所有语句,但我正在努力寻找正确的魔术词序列,以使解释器的行为与我的IDE一样。
答案 0 :(得分:1)
基于http://flask-sqlalchemy.pocoo.org/2.1/api/
的文档特别是
两者之间的区别在于第一种情况下的方法 create_all()和drop_all()将一直工作,但在第二个 case a flask.Flask.app_context()必须存在。
您能否确保使用
进入应用环境with app.app_context():
...
http://flask.pocoo.org/docs/0.11/api/#flask.Flask.app_context