# main.py
from flask import Flask, jsonify
from flask.ext.cors import CORS
from shared.database import db
from src import controllers
import os
app = Flask(__name__)
cors = CORS(app, allow_headers='Content-Type')
app.register_blueprint(controllers.api)
if (os.getenv('SERVER_SOFTWARE') and os.getenv('SERVER_SOFTWARE').startswith('Google App Engine/')):
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+gaerdbms:///gaiapro_api_dev?instance=dev-gaiapro-api:gaiapro-sql'
else:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqldb://root@127.0.0.1/gaiapro_api_dev'
app.config['DEBUG'] = True
db.init_app(app)
# shared/database.py
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# src/controllers/__init__.py
from flask import Blueprint, jsonify, request
from src import models
from src import views
from shared.helpers import *
api = Blueprint('api', __name__)
@api.route('/test')
def test():
...
# shared/helpers.py
from flask import jsonify, request, abort, make_response
from shared.database import db
def some_method():
...
db.session.commit() # Can access db normally from here
# src/models/__init__.py
from shared.database import db
class Client(db.Model):
id = db.Column(db.Integer, primary_key=True)
...
我正在为GAE(Google App Engine)开发。基本上我想要的是在_dev_appserver.py _的管理服务器中测试交互式控制台中的模型。
我尝试从交互式控制台运行以下代码:
from main import *
from src import models
print models.Client.query.get(1)
结果是:
RuntimeError:应用程序未在数据库实例上注册,且没有应用程序绑定到当前上下文
如果我尝试在此上下文中打印 db 变量,结果为:SQLAlchemy engine = None
我不知道我做错了什么。我的代码在浏览器上正常运行,但我无法通过交互式控制台使其运行。
答案 0 :(得分:8)
您需要位于app context(或请求上下文)才能访问应用程序绑定对象。
实现此目的的一种简单方法是使用Flask-Script,它提供了一个shell命令,可以为您设置应用程序。如果您使用的是开发版本,请使用Flask's integration with Click。
要立即开始工作,请自行设置上下文:
ctx = app.app_context()
ctx.push()
# do stuff
ctx.pop()
# quit
您还可以在with
块中使用上下文:
with app.app_context():
# do stuff
答案 1 :(得分:-1)
使用烧瓶壳代替默认的python解释器
$ flask shell
$ from yourappname import db
$ db # this will print your connection string
$ db.create_all()