为什么这个Flask-SQLAlchemy代码块执行两次?

时间:2014-10-08 06:01:24

标签: python sqlite flask flask-sqlalchemy

app.py的代码示例:

# imports here

app = Flask(__name__)
app.config.from_pyfile('app.cfg')
db.init_app(app)
with app.app_context():
    if os.path.exists('database/example.db'):
        print 'already exists'
    else:
        print 'database created'
        db.create_all()


#routes here

if __name__ == '__main__':
    app.run()

在初始加载时,它将打印“数据库已创建”,然后“已存在”。如果我在创建数据库时再次加载它,“已存在”打印两次。

already exists
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader
already exists

两部分问题:

1)为什么app.app_context()块会执行两次?

2)编写此代码的更好方法是什么?

1 个答案:

答案 0 :(得分:2)

要了解会发生什么,请回到python基础知识。键入python your_module.py时,python解释器将逐行读取(解释)您的代码。在这种情况下,它将在到达那里时执行您的with app.app_context代码,您将在下次看到输出数据库创建已存在。接下来发生什么?解释器只会继续使用if __name__ == '__main__':行,然后直接运行它会调用app.run方法,默认情况下debug参数为True,它将开始开发服务器处于调试模式,自动重新加载器将重新启动代码(如@burnpanck所述)。