I have a simple Flask app that realises rest-api with SQLAlchemy. I have written this create_app function:
def create_app(config): app.config.from_object(config) url = config.DATABASE_URI engine = create_engine(url) Base.metadata.create_all(engine) Base.metadata.bind = engine DBSession = sessionmaker(bind=engine) session = DBSession() app.db_session = session return app
and a typical view looks like:
@app.route('/restaurants', methods=['GET', 'POST']) def all_restaurants_handler(): if request.method == 'GET': # RETURN ALL RESTAURANTS IN DATABASE restaurants = app.db_session.query(Restaurant).all() return jsonify(restaurants=[i.serialize for i in restaurants])
So, when I write tests, I can pass to create_app function test configuration. Although this works, I have some doubts regarding design of this solution.
First of all, I don't like that I need to use
app.db_session in order to get the session. Second, I am not sure if it's a good decision to initialize db in the create_app function.