3
\$\begingroup\$

I have a simple Flask app that realises rest-api with SQLAlchemy. I have written this create_app function:

views.py

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:

views.py

@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.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.